在ASP.NET mvc 4中使用Ninject时是否需要控制器工厂
关于使用Ninject和asp.NETMVC4,我不知道如何处理google在.net中提供的大量文档 首先,我想知道在asp.net中是否需要控制器工厂在ASP.NET mvc 4中使用Ninject时是否需要控制器工厂,asp.net,ninject,Asp.net,Ninject,关于使用Ninject和asp.NETMVC4,我不知道如何处理google在.net中提供的大量文档 首先,我想知道在asp.net中是否需要控制器工厂 另外,构造函数注入真的是我们用MVC4进行依赖项注入的唯一方法吗?因为当我将属性注入和方法注入用于我的控制器时,它们似乎不起作用,我只使用它将我的数据源接口和我的EfDb类链接到我的应用程序的其余部分 如果您需要一本围绕Ninject构建真正应用程序的好书,请尝试: 或 我通常只关心很少几行代码 public class NinjectC
另外,构造函数注入真的是我们用MVC4进行依赖项注入的唯一方法吗?因为当我将属性注入和方法注入用于我的控制器时,它们似乎不起作用,我只使用它将我的
数据源接口
和我的EfDb类
链接到我的应用程序的其余部分
如果您需要一本围绕Ninject
构建真正应用程序的好书,请尝试:
或
我通常只关心很少几行代码
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:DefaultControllerFactory
{
私有IKernel-Ninject内核;
公共控制器工厂()
{
ninjectKernel=新的标准内核();
AddBindings();
}
受保护的重写IController GetControllerInstance(RequestContext RequestContext,类型controllerType)
{
返回控制器类型==null
无效的
:(IController)ninjectKernel.Get(controllerType);
}
私有void AddBindings()
{
ninjectKernel.Bind().To();
}
}
然后在Global.asax.cs
中注册您的NinjectControllerFactory
:
ControllerBuilder.Current.SetControllerFactory(新的NinjectControllerFactory())代码>
如您所见,此类使用方法注入使用私有void AddBindings()
。如果您遵循测试驱动开发(TDD)
请参见此处的文档:
,“唯一需要做的是为其依赖项配置Ninject绑定。即使不添加绑定,Ninject也会找到控制器本身。”
NInject将自动设置您的控制器依赖项(前提是它具有这些类型的绑定)。但我在某个地方读到,如果您的应用程序继承自NinjectHttpApplication并覆盖适当的方法,控制器将通过IOC容器自动设置依赖项统计。@PeterEdike每个人都有自己的编写代码的方式,这个游戏的全部内容是选择一种有效的风格,并不断改进。我建议您阅读我提到的其中一本书。我对这方面不太了解,但这段代码运行良好。我使用的是MVC5/WebApi2,这种方法对我不起作用@科门格姆的建议奏效了。