MVC 4 アプリケーションで NuGet の ninject を使用しています
public class MvcApplication : System.Web.HttpApplication
ninject クラスを bas クラスとして使用できたことはわかっていますが、使用しませんでした。
私のglobal.asax.csで私は
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
どこ
public class NinjectControllerFactory : DefaultControllerFactory {
private IKernel _ninjectKernel;
public NinjectControllerFactory() {
_ninjectKernel = new StandardKernel();
AddBindings();
}
public T GetInstance<T>() {
return _ninjectKernel.Get<T>();
}
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) {
return controllerType == null
? null
: (IController)_ninjectKernel.Get(controllerType);
}
private void AddBindings() {
_ninjectKernel.Bind<IVIPRepository>().To<VIPRepository>().InRequestScope().
WithConstructorArgument("connectionString", ConfigurationManager.ConnectionStrings["VIPFullContext"].ConnectionString);
_ninjectKernel.Bind<IPrezentationProvider>().To<HardPrezProvider.HardPrezentationProvider>().InRequestScope(); ;
}
}
私のweb.configでモジュールをロードします(そしてそれが十分にロードされていることを確認します)
<system.webServer>
<modules>
<add name="OnePerRequestHttpModule" type="Ninject.Web.Common.OnePerRequestHttpModule"/>
</modules>
</system.webServer>
私のコントローラーはから派生しBaseController(IVIPRepository repo)
ます。そして、アプリケーションはうまく動作します...しかし、リポジトリ(および関連するコンテキスト)は決して破棄されないようです(VIPRepositoryの破棄メソッドのブレークポイント)
NinjectWebCommon.cs
Ninjectを正しくセットアップしたと思うので、削除してapp_startもクリアします....そうではないようです。
私は何を間違えましたか?
前もって感謝します