29

Probably a Unity beginner's question: when using Unity, would you still need to implement Dispose methods on the objects you have injected? Or is even this not needed (so, done automatically by Unity)? This is in the context of a web application.

4

3 に答える 3

31

実装IDisposableは Unity とは関係ありません。CLR でガベージ コレクションできないファイルなどのアンマネージ リソースを型が使用している場合は、インターフェイスを実装する必要があります。

Unity は、型とインスタンスの有効期間を管理できます。この場合、Unity はさまざまなタイプの LifeTimeManager を提供して、インスタンスのライフタイムを制御します。

Unity は、またはIDisposableを使用して登録した場合にのみインターフェイスを尊重します。つまり、Unity-Container を破棄すると、上記の名前付き LifetimeManager によって登録されたインターフェイスを実装するすべてのインスタンスでも呼び出されます。ContainerControlledLifetimeManagerHierarchicalLifetimeManagerDisposeIDisposable

IDisposableを使用してインターフェースを実装するタイプを登録する場合TransientLifetimeManager(コンテナで Resolve を呼び出すタイプごとに新しいインスタンスを取得します)、Disposeインスタンスを呼び出すのはあなた次第です。

于 2012-11-27T10:15:27.780 に答える