Asp.net mvc MVC控制器的问题+;中等信任中的依赖项注入(Ninject)
我想在中等信任环境中使用依赖项注入。为了达到这个目的,我选择了Iv,因为有人告诉我它很轻。如何设置控制器的注入 当我尝试创建自定义控制器工厂时:Asp.net mvc MVC控制器的问题+;中等信任中的依赖项注入(Ninject),asp.net-mvc,dependency-injection,inversion-of-control,ninject,medium-trust,Asp.net Mvc,Dependency Injection,Inversion Of Control,Ninject,Medium Trust,我想在中等信任环境中使用依赖项注入。为了达到这个目的,我选择了Iv,因为有人告诉我它很轻。如何设置控制器的注入 当我尝试创建自定义控制器工厂时: public class NinjectControllerFactory : DefaultControllerFactory { private readonly IKernel _kernel; public NinjectControllerFactory(params IModule[] module
public class NinjectControllerFactory : DefaultControllerFactory
{
private readonly IKernel _kernel;
public NinjectControllerFactory(params IModule[] modules)
{
_kernel = new StandardKernel(modules);
}
public override IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)
{
IController controller = base.CreateController(requestContext, controllerName);
_kernel.Inject(controller);
return controller;
}
}
但我遇到了这个错误:
如果控制器没有
控制器出厂时,确保其
无参数公共构造函数。”
想知道如何让Ninject或任何其他IoC框架在中等信任下工作(意味着不使用反射)在创建容器时尝试设置此选项:
UseReflectionBasedInjection = true;
好提示(但你的意思是将其设置为false吗?),我更改了构造函数,使其如下所示:
public NinjectControllerFactory(params IModule[] modules)
{
_kernel = new StandardKernel(modules);
_kernel.Options.UseReflectionBasedInjection = false;
}
但这会得到相同的异常。
我也尝试过像这样覆盖GetControllerInstance
protected override IController GetControllerInstance(Type controllerType)
{
return _kernel.Get(controllerType) as IController;
}
但这会引发一个安全异常,因为它使用反射。要在中等信任中运行Ninject 1.x,必须将
UserReflectionBasedInjection
选项设置为true
。Ninject 2.0不受此限制
反射实际上不是中等信任中的受保护操作,但轻量级代码生成(Ninject在默认情况下用于注入)至少在.NET3.5SP1之前是这样
一旦您切换到基于反射的注入,您的代码应该可以正常工作。我还鼓励您查看Ninject.Framework.Mvc(对于Ninject 1.x)或Ninject.Web.Mvc(对于Ninject 2.0)。这些扩展为您处理繁重的工作。我从未解决过这个问题,最后,我毫无困难地切换到了-在中等信任中工作。我使用的是ninject 2。ninject.Web.Mvc不是中等信任
protected override IController GetControllerInstance(Type controllerType)
{
return _kernel.Get(controllerType) as IController;
}