1

Nancy と Nancy.Bootstrappers.Ninject を使用した簡単なアプリケーションがあります。Web アプリは、既に Ninject を使用しているより大きなアプリケーション セットの一部であるため、Ninject を使用する必要があります。

さまざまなセットアップを試しました:

  • ただNancyNancy.Bootstrappers.Ninject
  • で、 web activator を使用してNinject.Web.Common2 つを登録しますHttpModules
  • 作成されたカーネルをオーバーライドGetApplicationContainer()して返すことによってNinject.Web.Common

バインディングは次のように単純です

protected override void ConfigureRequestContainer(IKernel kernel, NancyContext context)
{
    kernel.Bind<IRepository>().To<Repository>().InRequestScope();
}

そして、私のカスタム Nancy ブートストラップにあります。もちろん、IRepository拡張します。IDisposable

しかし、これらのセットアップのいずれも、Dispose()私の方法ではありませんでしたRepository

Dispose()リクエストが完了した後に呼び出すリクエストごとのバインディングをセットアップする正しい方法は何ですか?

4

1 に答える 1

2

とった。https://github.com/NancyFx/Nancy.Bootstrappers.Ninjectで提供される情報は十分ではないようです。https://github.com/NancyFx/Nancy/wiki/Container-Supportで以下を見つけました:

ConfigureRequestContainer() の container パラメータは、リクエストの最後に配置される子コンテナです。

ここのコンテナは子コンテナです。つまり、ここのシングルトンはリクエスト スコープ内にあります。

どうやら、InSingletonScope()リクエストごとのカーネルがオブジェクトを破棄するために必要です。そのソリューションでは、すべての Ninject.Web のものは必要ありません!

于 2013-05-29T21:03:08.397 に答える