我在为使用Ninject用asp.net mvc的关于如何处理文档提供.NET众多通过谷歌做损失4在ASP.NET MVC使用Ninject当控制器工厂neccessary 4
首先,我想知道控制器工厂是否需要在asp.net中。
还有,就是构造函数注入真是我们所能做的依赖注入MVC 4,因为财产注入和方法注入似乎并不当我使用他们与我的控制器
我在为使用Ninject用asp.net mvc的关于如何处理文档提供.NET众多通过谷歌做损失4在ASP.NET MVC使用Ninject当控制器工厂neccessary 4
首先,我想知道控制器工厂是否需要在asp.net中。
还有,就是构造函数注入真是我们所能做的依赖注入MVC 4,因为财产注入和方法注入似乎并不当我使用他们与我的控制器
我不是Ninject
的专家一起工作的唯一途径但据我所知,我只用它将我的DataSource Interface
和我的EfDb Class
链接到我的应用程序的其余部分。
如果你需要有大约Ninject
尝试建立一个真正的应用程序一本好书: Pro ASP.NET MVC 3 Framework, Third Edition
或
有代码非常几行我通常关心
public class NinjectControllerFactory : DefaultControllerFactory
{
private IKernel ninjectKernel;
public NinjectControllerFactory()
{
ninjectKernel = new StandardKernel();
AddBindings();
}
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
return controllerType == null
? null
: (IController) ninjectKernel.Get(controllerType);
}
private void AddBindings()
{
ninjectKernel.Bind<IDataSource>().To<EfDb>();
}
}
然后注册您的NinjectControllerFactory
在Global.asax.cs
有:
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
正如你所看到的,这个类使用Method Injection
使用private void AddBindings()
。这使得它非常容易,如果你是以下Test Driven Development (TDD)
在这里看到的文档: https://github.com/ninject/ninject.web.mvc/wiki/Dependency-injection-for-controllers“,即必须做的唯一一件事就是配置Ninject绑定其依赖控制器本身将Ninject发现即使而无需添加绑定。“
NInject会自动设置您的控制器依赖关系(假设它具有这些类型的绑定)。
我正在使用MVC5/WebApi2,并且此方法对我无效。 @Komengem的建议奏效了。 – codeMonkey 2017-02-09 07:43:17
但是我读了一些地方,如果你的应用程序继承自NinjectHttpApplication并重写适当的方法,控制器将通过IOC容器自动地具有依赖关系statisfied。 – 2013-03-11 15:54:53
@PeterEdike每个人都有他们自己的编写代码的方式,这个游戏全部是关于拾取一种可以工作并在路上改进的风格。我建议你阅读我提到的那些书之一。 – Komengem 2013-03-11 19:20:15
是的,我已经得到了这本书。我现在正在阅读它 – 2013-03-12 16:13:28