Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc MVC控制器的问题+;中等信任中的依赖项注入(Ninject)_Asp.net Mvc_Dependency Injection_Inversion Of Control_Ninject_Medium Trust - Fatal编程技术网

Asp.net mvc MVC控制器的问题+;中等信任中的依赖项注入(Ninject)

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

我想在中等信任环境中使用依赖项注入。为了达到这个目的,我选择了Iv,因为有人告诉我它很轻。如何设置控制器的注入

当我尝试创建自定义控制器工厂时:

 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;
    }