2012-04-25 3 views
2

私は、コンテナを設定するためのクラスFooを持っています。これは、Windowsサービスのエントリポイントとして使用される別のクラスBarのファクトリとして機能します。Autofac OnRelease()が呼び出されていません

Barクラスには、ソケット接続を開くBazのインスタンスが挿入されています。

Fooでは、IBazには接続を開くためのOnActivated()と接続を閉じるOnRelease()が設定されています。

受け入れテストでは、Fooを使用してBarを作成し、期待される結果を検証します。問題は、Baz接続が決して閉じられないためテストが完了しないことです。これはOnRelease()が呼び出されないためです。

Fooが範囲外になってガベージコレクトされると、コンテナはOnRelease()デリゲートを呼び出す必要があります。

どうしてこのようなことは起こりませんか?

答えて

2

コンポーネントの解放を制御するには、有効期間スコープを使用する必要があります。 Autofacのライフタイム管理は常に明示的であり、GCに依存しません。

この場合、コンテナを配置することによってOnReleaseメソッドが呼び出されるというこの役割を果たすコンテナ自体である可能性があります。それは長い読書の少しですが、thisは詳細をカバーしています。

+0

私はちょうどこれにつまずいた。詳細は今は思い出せませんが、OnRelease()は呼び出されていないと思います。なぜならソケットはオブジェクトを生かしているからです。 –

関連する問題