2017-06-22 81 views
0

前一段時間,我在Asp.Net MVC項目中構建了一個ControllerFactory,其目標是使用Generic Controllers。這家工廠是這樣的:ASP.NET Mvc通用控制器和Ninject同時注入InRequestScope

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

不要從NinjectHttpApplication繼承Global.asax。您仍然可以使用InRequestScope來控制生命週期。

+0

好吧,我不會,但那不能回答我的問題 –

相關問題