私は、私の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コードを保持する方法はわかりません。
どのようにして両方の目標を達成できますか?
私はしませんが、それは私の質問には答えません –