Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.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
C# ASP.NET Mvc通用控制器和Ninject同时在RequestScope中注入_C#_Asp.net Mvc_Asp.net Mvc 4_Ninject - Fatal编程技术网

C# ASP.NET Mvc通用控制器和Ninject同时在RequestScope中注入

C# ASP.NET Mvc通用控制器和Ninject同时在RequestScope中注入,c#,asp.net-mvc,asp.net-mvc-4,ninject,C#,Asp.net Mvc,Asp.net Mvc 4,Ninject,不久前,我构建了一个ControllerFactory,目标是在我的Asp.NETMVC项目中使用通用控制器。这个工厂是这样的: public class MyControllerFactory : DefaultControllerFactory { public override IController CreateController(RequestContext requestContext, string controllerName) { if (/*

不久前,我构建了一个ControllerFactory,目标是在我的Asp.NETMVC项目中使用通用控制器。这个工厂是这样的:

public class MyControllerFactory : DefaultControllerFactory
{
    public override IController CreateController(RequestContext requestContext, string controllerName)
    {
        if (/*controller is generic, I know it by a convention in the controllerName*/)
        {
            string typeName = //resolve Type name from controllerName and requestContext;
            Type controllerType = typeof(MyGenericController<>).MakeGenericType(Type.GetType(typeName));

            var ninjecKernel = //get a ninject kernel;
            return (IController)ninjecKernel.Get(controllerType);
        }
        else 
        {
            //build a normal controller
        }
    }
}
公共类MyControllerFactory:DefaultControllerFactory
{
公共重写IController CreateController(RequestContext RequestContext,string controllerName)
{
如果(/*控制器是泛型的,我通过controllerName*/中的约定知道它)
{
string typeName=//从controllerName和requestContext解析类型名;
Type controllerType=typeof(MyGenericController).MakeGenericType(Type.GetType(typeName));
var ninjecKernel=//获取一个ninject内核;
返回(IController)ninjecKernel.Get(controllerType);
}
其他的
{
//构建一个普通的控制器
}
}
}
我在Globar.asax文件中使用此控制器工厂,如下所示
ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory())

但在ninject注入控制器的服务中,这些服务是InSingletonScope。现在我决定将这些服务注入RequestScope,这样,这些服务就可以共享相同的EntityFramework上下文。为了对此进行归档,我尝试使用一种方法,即在请求范围内注入服务时,使用Ninject.Web.Mvc.dll。在这种方法中,ninject是通过继承NinjectHttpApplication的mvcapapplication of Global.asax在内部构建控制器的人,因此我不知道如何保留通用控制器代码


我如何实现这两个目标

不要从NinjectHttpApplication继承您的Global.asax。您仍然可以使用RequestScope中的
来控制生命周期

好吧,我不会的,但这并不能回答我的问题