[英]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.