NancyFX の TinyIOC で依存性注入を使用しようとしています。
私がやろうとしているのは、リクエストごとに 1 つの SqlConnection を自動的に閉じる必要があることです。これまでに行ったことは、ConfigureRequestContainer メソッドをオーバーライドし、IDbConnectionService を AsPerRequestSingleton() メソッドに登録する CustomBootstrapper を作成することです。
これにより、リクエストごとに SqlConnectionService が存在し、リクエスト後に破棄する必要があります。少なくとも、ドキュメントを読んだ後、それがすべきだと思います。
カスタム ブートストラッパー:
https://github.com/mschlechter/NancyFxTutorial/blob/master/NancyFxTutorial.Web/CustomBootstrapper.cs
そして SqlConnectionService:
このサービスは IDisposable インターフェイスを実装し、基になる SqlConnection を破棄する必要があります (IDbConnectionService は IDisposable から継承します)。
残念ながら、この Dispose() メソッドが呼び出されることはありません。したがって、現状では、データベースへの接続を開いたままにします。これは(本当に)悪いことです:-)
私の質問は、依存性注入を使用してこれを修正する方法です。
Java で Spring MVC から知っているパターンをエミュレートしようとしています。すべてのサービスは getCurrentSession() を呼び出して Hibernate セッションを取得できます。リクエスト スコープの SessionFactory が挿入され、すべてのサービスが sessionFactory.getCurrentSession() を実行して現在のセッションを取得できます。
NancyFX と TinyIOC を使用して同じようなことをしたいと思っています。
元の質問に戻ります: AsPerRequestSingleton() で作成されたオブジェクトで Dispose メソッドが呼び出されないのはなぜですか? 意図した結果を得るにはどうすればよいですか? (リクエスト / レスポンス スコープの期間中存続し、完了すると自動的に破棄されるオブジェクト)
よろしくお願いいたします。 Marc Schlechter