2

NancyFX の TinyIOC で依存性注入を使用しようとしています。

私がやろうとしているのは、リクエストごとに 1 つの SqlConnection を自動的に閉じる必要があることです。これまでに行ったことは、ConfigureRequestContainer メソッドをオーバーライドし、IDbConnectionService を AsPerRequestSingleton() メソッドに登録する CustomBootstrapper を作成することです。

これにより、リクエストごとに SqlConnectionService が存在し、リクエスト後に破棄する必要があります。少なくとも、ドキュメントを読んだ後、それがすべきだと思います。

カスタム ブートストラッパー:

https://github.com/mschlechter/NancyFxTutorial/blob/master/NancyFxTutorial.Web/CustomBootstrapper.cs

そして SqlConnectionService:

https://github.com/mschlechter/NancyFxTutorial/blob/master/NancyFxTutorial.Web/Services/SqlConnectionService.cs

このサービスは IDisposable インターフェイスを実装し、基になる SqlConnection を破棄する必要があります (IDbConnectionService は IDisposable から継承します)。

残念ながら、この Dispose() メソッドが呼び出されることはありません。したがって、現状では、データベースへの接続を開いたままにします。これは(本当に)悪いことです:-)

私の質問は、依存性注入を使用してこれを修正する方法です。

Java で Spring MVC から知っているパターンをエミュレートしようとしています。すべてのサービスは getCurrentSession() を呼び出して Hibernate セッションを取得できます。リクエスト スコープの SessionFactory が挿入され、すべてのサービスが sessionFactory.getCurrentSession() を実行して現在のセッションを取得できます。

NancyFX と TinyIOC を使用して同じようなことをしたいと思っています。

元の質問に戻ります: AsPerRequestSingleton() で作成されたオブジェクトで Dispose メソッドが呼び出されないのはなぜですか? 意図した結果を得るにはどうすればよいですか? (リクエスト / レスポンス スコープの期間中存続し、完了すると自動的に破棄されるオブジェクト)

よろしくお願いいたします。 Marc Schlechter

4

0 に答える 0