2

コンテナを構成するために使用されるクラスFooがあり、Windowsサービスのエントリポイントとして使用される別のクラスBarのファクトリとして機能します。

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

Fooでは、IBazは、接続を開くためのOnActivated()と、接続を閉じるためのOnRelease()で構成されます。

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

私の理解では、Fooがスコープ外になり、ガベージコレクションが行われると、コンテナーはOnRelease()デリゲートを呼び出す必要があります。

なぜこれが起こらないのでしょうか?

4

1 に答える 1

2

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

この場合、この役割を果たすのはコンテナー自体である可能性があります。コンテナーを破棄すると、OnReleaseメソッドが呼び出されます。少し長い読み物ですが、これで詳細を説明します。

于 2012-04-26T13:22:29.463 に答える