2017-06-22 12 views
0

私は、私のAsp.Net MVCプロジェクトでGeneric Controllersを使うという目的でControllerFactoryを構築しました。この工場では、このようなものです: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 
     } 
    } 
} 

私はこのControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());

のようなファイルGlobar.asaxでこのコントローラファクトリを使用しますが、コントローラにninjectによって注入サービスにInSingletonScopeです。今度は、これらのサービスInRequestScopeを注入することに決めました。そのため、サービスは同じEntityFrameworkコンテキストを共有できます。これをアーカイブするには、Ninject.Web.Mvc.dllを使用して、サービスがリクエストスコープで注入されたときに、thisのアプローチを使用しようとしています。このアプローチでは、NinjectはNinjectHttpApplicationのGlobal.asaxのMvcApplicationを継承して内部的にコントローラをビルドしているので、Generic Controllerコードを保持する方法はわかりません。

どのようにして両方の目標を達成できますか?

答えて

0

NinjectHttpApplicationからGlobal.asaxを継承しないでください。あなたはまだInRequestScopeを使用して寿命を制御することができます。

+0

私はしませんが、それは私の質問には答えません –

関連する問題