0

Lässt man zur Laufzeit ein Objekt erstellen, das mehrere IDisposables enthält. Soweit ich es verstanden habe, wäre es eine gute Übung, einen lebenslangen Umfang für dieses Objekt zu erstellen, so dass alle seine Einwegartikel automatisch bereinigt werden.Einen Gültigkeitsbereich in Autofac erstellen

Aber wie genau erstelle ich das Scope? Müssen Sie den Container nicht weitergeben oder zu einer globalen Variablen machen? Auch: wann/wie würde ich den Lifetime Scope beenden?

Hier ist, wie meine Klassen jetzt aussehen, ohne den Anwendungsbereich:

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

Antwort

1

OK, ich die Lösung selbst gefunden: Statt Dokumente zu erstellen, ich meine Fabrik einfach Owned<Document> zu produzieren geändert. Diese können entsorgt werden und alle nativen Ressourcen übernehmen, die sie mit ihnen gelöst haben.

Wirklich einfach. Danke Autofac :-)