簡體   English   中英

在Autofac中創建生命周期范圍

[英]Creating a lifetime scope in Autofac

可以說在運行時我創建了一個對象,該對象將容納多個IDisposables。 據我了解,為該對象創建生命周期范圍是個好習慣,這樣它的所有一次性物品都會自動清理。

但是如何精確創建范圍? 這是否不需要將容器傳遞給容器或使其成為全局變量? 另外:我何時/如何終止生命周期范圍?

這是我的班級現在的外觀,沒有范圍:

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());
    }
}

好的,我自己找到了解決方案:不用創建Documents,我只是將工廠更改為生產Owned<Document> 可以處理這些資源,並占用與它們一起解析的所有本機資源。

真的很簡單。 謝謝的Autofac :-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM