2016-09-09 15 views
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()); 
    } 
} 

答えて

1

OK、私は解決策を自分で見つけ: 代わりに文書を作成するので、私は単にOwned<Document>を生成するために私の工場を変えました。これらは、処分され、彼らが解決したネイティブリソースをすべて取ることができます。

本当に簡単です。ありがとう、オートファック:-)

関連する問題