Frage

Autofac-Neuling hier, aber mir gefällt, was ich bisher sehe.Ich versuche, die Anforderungslebensdauer meiner aufgelösten Objekte zu nutzen, und es fällt mir schwer zu bestätigen, dass tatsächlich eine Entsorgung erfolgt, nachdem eine Anforderung abgeschlossen ist.

Ich habe ein verfügbares Objekt, das ich zu Beginn einer Seitenanforderung erhalte und am Ende entsorge.Ich verwende jetzt Autofac, um eine Instanz des Objekts abzurufen, und wollte sehen, ob Autofac die Entsorgung für mich übernimmt.

Ich habe die Dispose()-Methode für das betreffende Objekt instrumentiert und kann sehen, dass sie „auslöst“, wenn meine Seite die Lebensdauerverwaltung durchführt.Ich sehe keine Beweise dafür, wenn ich mich nicht entledige, sondern Autofac das machen lasse.

Ich benutze diese Anweisungen zum Konfigurieren dieser Dinge, einschließlich der Änderungen an web.config und global.asax.Ich kann das Objekt problemlos instanziieren, kann aber nicht sagen, ob es wirklich entsorgt wird.Gibt es einen weiteren Schritt?

War es hilfreich?

Lösung 3

Ich habe es herausgefunden!

Ich habe den FALSCHEN Container nach der Objektinstanz gefragt – ich habe den Anwendungscontainer nach dem Objekt gefragt und nicht den Anforderungscontainer.

D'oh!

Andere Tipps

Ob Sie das Objekt manuell innerhalb der Seite verfügen oder die Autofac lassen Sie es tun Modul, wird es einen Unterschied in der, wenn Ihr Objekt in Bezug auf die Anforderungslebenszyklus angeordnet ist. The Autofac ContainerDisposalModule wird a href nicht <= "http://code.google.com/p/autofac/source/browse/trunk/src/Source/Autofac.Integration.Web/ContainerProvider.cs" rel = "nofollow noreferrer" > entsorgen die Anfrage Container und damit das Objekt, bis die HttpApplication.EndRequest abgefeuert wird, die am Ende des Anforderungslebenszyklus.

Je nachdem, wie Sie den Anruf, um Ihre Objekte Dispose-Methode werden verfolgt, könnte es eine Möglichkeit, dass Sie die Ausgabe nicht sehen. Wie werden instrumentieren Sie Ihre Dispose-Methode?

Wiederholung der Antwort von Ihrem Re-post:

  

Die meiste Zeit geschieht diesen (in jedem   IoC-Container) Sie werden feststellen, dass man finden   Komponente entlang einer Kette von   Abhängigkeiten sind ein Singleton.

     

z.

     

A -> B -> C

     

Wenn eine 'Fabrik' ist, B 'Singleton'   und C ist ‚Fabrik‘, dann eine Lösung   wird eine Referenz auf das Singleton bekommen   B, die immer verweisen,   gleiche C.

     

Um für eine neue C erhalten erstellt   jedes Mal, wenn A lösen, B muss auch   sein 'Fabrik'.

Entsorgen Sie ist nichts anderes als eine Schnittstelle, die Ihnen eine „Entsorgen“ Methode definieren. Die häufigste Verwendung für eine Einweg-Klasse erforderlich ist, wenn es Ressourcen in dieser Klasse, die explizit freigegeben werden sollte (wie zum Beispiel eines Fensters Ressourcenhandle). Zum größten Teil wird die IDisposable-Schnittstelle nicht erforderlich, da der Garbage Collector extrem leistungsfähig und wird bei der Verwaltung Speicher eine viel bessere Arbeit tun. Aber offensichtlich gibt es viele Fälle, in denen Griffe müssen sofort freigelassen werden, die mich auf den nächsten Punkt bringt, Implementierung von IDisposable.

Was nicht zu tun:

var myClass = MyDisposableClass();

// do stuff with myClass

myClass.Dispose();


Proper usage:

using (var myClass = MyDisposableClass())
{
    // do stuff with myClass
}

Der Compiler wird effektiv das gleiche wie die folgenden Aufbau:

MyDisposableClass myClass = MyDisposableClass();
try
{
    // do stuff with myClass
}
finally
{
    myClass.Dispose();
}

Der wichtige Unterschied ist, dass egal, was passiert, wissen Sie Dispose wird aufgerufen. Darüber hinaus können Sie eine destructor binden (die, wenn sie vorhanden ist, durch den Garbage Collector genannt wird), die Sie dann in binden können Ihre Dispose-Methode zu nennen; aber wenn Sie benötigen diese sicher sein, für welchen Gründen auch immer tun, um nicht die gleiche Ressource frei zweimal (stellen Sie Ihren Zeiger auf Null nach dem Loslassen).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top