在MVC5中使用Ninject 依赖注入
各大主流.Net的IOC框架性能测试比较 :
http://www.cnblogs.com/liping13599168/archive/2011/07/17/2108734.html
使用NuGet下载安装 Ninject,确认引用服务中存在 Ninject
在项目中新建 NinjectControllerFactory.cs 类
using BooksStore.Domain.Service.Book; using BooksStore.Domain.Service.impl; using Ninject; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; namespace BooksStore.WebUI.Infrastructure { public class NinjectControllerFactory:DefaultControllerFactory { private readonly IKernel _kernel; public NinjectControllerFactory() { _kernel = new StandardKernel(); AddBindings(); } protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) { return controllerType == null ? null : (IController)_kernel.Get(controllerType); } /// <summary> /// 添加绑定 /// </summary> private void AddBindings() { //绑定接口和实现类 _kernel.Bind<IBookService>().To<BookService>(); } } }
在Global.asax 注册 这个容器
using BooksStore.WebUI.Infrastructure; using System.Web.Mvc; using System.Web.Routing; namespace BooksStore.WebUI { public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RouteConfig.RegisterRoutes(RouteTable.Routes); //注册Ninject容器 ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory()); } } }
在控制器中调用接口 使用Ninject依赖注入 就能正常调用接口
[Ninject.Inject] public IBookService _IBookService { set; get; }
使用构造函数注入
private IBookService _bookService; public BookController(IBookService bookService) { _bookService = bookService; }