C# ASP.NET Mvc通用控制器和Ninject同时在RequestScope中注入
不久前,我构建了一个ControllerFactory,目标是在我的Asp.NETMVC项目中使用通用控制器。这个工厂是这样的: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 (/*
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中的来控制生命周期 好吧,我不会的,但这并不能回答我的问题