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