Позволяет сказать, что во время выполнения я создаю объект, который будет содержать несколько 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());
}
}