0

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.csNinjectを正しくセットアップしたと思うので、削除してapp_startもクリアします....そうではないようです。

私は何を間違えましたか?

前もって感謝します

4

1 に答える 1