0
実行時にいくつかのIDisposablesを保持するオブジェクトを作成します。私が理解する限り、そのオブジェクトの寿命スコープを作成して、すべての使い捨てアイテムが自動的にクリーンアップされるようにすることをお勧めします。Autofacで生涯スコープを作成する
しかし、スコープをどのように作成すればよいですか?コンテナを渡したり、グローバル変数にする必要はありませんか? また、生涯範囲を終了する時期/方法は?
は、ここに私のクラスはスコープなしで、今見てみましょう:internal class DocumentManager
{
private readonly List<Document> mDocuments;
private readonly Func<Document> mDocumentFactory;
public DocumentManager(Func<Document> documentFactory)
{
mDocumentFactory = documentFactory;
mDocuments = new List<Document>();
}
public void AddDocument()
{
mDocuments.Add(mDocumentFactory.Invoke());
}
public void CloseAllDocuments()
{
mDocuments.Clear(); // -> Memory leak!
}
}
internal class Document
{
private List<NativeResource> mNativeResources;
public Document(Func<NativeResource> nativeResourceFactory)
{
// Create some native resources. They will need to be disposed when this object dies?
mNativeResources = new List<NativeResource>();
mNativeResources.Add(mNativeResourceFactory.Invoke());
mNativeResources.Add(mNativeResourceFactory.Invoke());
mNativeResources.Add(mNativeResourceFactory.Invoke());
}
}