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>을 생산하기 위해 내 공장을 바 꾸었습니다. 이것들은 처분되고 그들과 함께 해결 된 모든 원시 리소스를 취할 수 있습니다.

정말 간단합니다. 감사합니다 Autofac :-)