不久前,我构建了一个ControllerFactory,其目标是在我的Asp.Net MVC项目中使用Generic Controllers。这个工厂是这样的:
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
}
}
}
我在Globar.asax文件中使用此控制器工厂,如ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());
但是在ninject注入控制器的服务中是InSingletonScope。现在我决定注入那些服务InRequestScope,因此,服务可以共享相同的EntityFramework上下文。要归档这个,我正在尝试使用this方法,当使用Ninject.Web.Mvc.dll在请求范围中注入服务时。在这种方法中,ninject是通过从NinjectHttpApplication继承Global.asax的MvcApplication而在内部构建控制器的人,因此我不知道如何保留通用控制器代码。
我怎样才能达到这两个目标?
答案 0 :(得分:0)
不要从NinjectHttpApplication继承你的Global.asax。您仍然可以使用InRequestScope
来控制生命周期。