在使用Ninject和asp.net mvc 4时,我无法通过谷歌的.net提供大量文档。
首先,我想知道控制器工厂是否在asp.net中是必要的。
另外,构造函数注入真的是我们可以用MVC 4进行依赖注入的唯一方法,因为当我将它们与我的控制器一起使用时,属性注入和方法注入似乎不起作用
答案 0 :(得分:9)
我不是Ninject
的专家,但就我所知,我只是用它来将我的DataSource Interface
和我的EfDb Class
链接到我的应用程序的其余部分。
如果您需要一本围绕Ninject
构建Real应用程序的好书,请尝试:
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)
答案 1 :(得分:2)
请参阅此处的文档: https://github.com/ninject/ninject.web.mvc/wiki/Dependency-injection-for-controllers,“唯一需要做的就是为其依赖项配置Ninject绑定。即使没有添加绑定,Ninject也可以找到控制器本身。”
NInject将自动设置您的控制器依赖项(前提是它具有这些类型的绑定)。