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

ОК, я нашел решение сам: Вместо того чтобы создавать документы, я просто изменил мой завод по производству Owned<Document>. Они могут быть удалены и использовать все собственные ресурсы, которые они разрешили с ними.

Действительно простой. Thank's Autofac :-)

Смежные вопросы