Schloss Windsor - habe ich zu release singleton oder nicht-Einweg-Transienten Objekte?
Den Burg wiki sagt an mehreren stellen, ich sollte IMMER anrufen container.Release() für die Komponenten gelöst durch den Behälter. Dies macht Sinn für kultivierte life-style-management-Techniken (z.B. Lebensstil.Zusammengefasst) oder bei der Verwendung von spezialisierten Einrichtungen,...
Aber muss ich wirklich loslassen singleton (die live, bis der Behälter entsorgt) und nicht-Einweg-Transienten Objekte? Wenn ich einen Schritt über die Release () - Aufrufe für transiente Objekte oder singletons diese Anrufe scheinen überflüssig .e.g. im Fall der Transienten Objekte, die IDisposable nicht implementieren den kernel einfach merkt, dass es hat keine Spur von dem Objekt und gibt...
Scheint es das Konzept der "Komponente " Last" zu verfolgen "indirekte" Verweise zu anderen Einweg-Komponenten, die möglicherweise aufgebaut werden, während die Lösung eines Transienten Objektes. Ich verstehe, dass es notwendig ist, um release-Transienten Objekte, wenn Sie nicht 100% wissen, ob Sie solche indirekten Abhängigkeiten oder nicht. Ist dies der wesentliche Grund dafür, "dringend" alle Castle Benutzer IMMER release-Komponenten?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Burg-Wiki ist ein wenig streng hier - versuchen, sicher zu sein, anstatt Leid. Es könnte etwas Paraphrase es wohl.
Sowieso - hier ist, wie es funktioniert.
Windsor (standardmäßig) tracks, die meisten Komponenten und es hält Referenz auf die Haltestellen der Garbage Collector das sammeln von Ihnen. Dies ist kein bug es ist ein feature, und ein extrem nützlich und mächtig.
In den meisten Fällen sollten Sie nicht davon ausgehen, wenn eine Komponente verfolgt wird oder nicht. Ein nicht-Einweg-Komponente, die Einweg-Abhängigkeiten werden auch verfolgt werden. Dies ist in der Regel: "Komponenten, die entweder selbst von einigen Ihrer Abhängigkeiten haben alle außer Betrieb nehmen Schritte verfolgt werden standardmäßig release-Politik in Windsor".
Nun, hier ist der Teil, wo das Leben ins Spiel kommen.
Singleton - definition von singleton sind "global" in den Kontext des Containers ein - Sie erstellt, wenn Sie die erste Anfrage Ihnen Leben und für den rest der Lebensdauer des Containers (das heißt, bis der Behälter wird entsorgt). Wenn Sie die Dokumentation sehen, es sagt eigentlich, dass die Freigabe von singletons eigentlich nicht tun. Es ist nur, wenn der Behälter wird entsorgt, die Außerbetriebnahme Anliegen Ihrer Lebensdauer der Komponenten wird aufgerufen.
Pro (Kontext: web-Anfrage/WCF Sitzung/) - da das Objekt ist geteilt in einen definierten Kontext mit einem gut definieren, Ende, Ende wird der Kontext kümmern sich um die Freigabe Ihrer Bauteile.
Transient - Das ist, wo können die wirklichen Probleme schleichen sich ein. Da die Transienten Komponenten haben keine Ende, beliebigen Ende der Lebensdauer und produzieren Sie die Haufen Ihrer Instanzen, die während der Lebenszeit der app, es gibt keinen anderen Weg, als dass Sie explizit und zu sagen, um den Behälter "hey, ich bin nicht gonna verwenden, die dieses Objekt mehr, fühlen Sie sich frei, um es loszuwerden, danke für den Fisch."
Nun der Grund, warum die Dokumentation schlage vor, immer die Freigabe der Komponenten ist, dass der code, der Komponenten verwendet, sollten Sie nicht wirklich wissen, was die Lebensdauer einer Komponente ist.
Es ist nicht immer der Fall, und oft in Anwendungen, Komponenten vorhanden sind, die "natürlich" fit lifestyle. Im Allgemeinen jedoch, wie ich sagte, es ist, sicher zu sein, anstatt Leid.
Andere Sache ist, wo Sie nennen die
Resolve
undRelease
. Sie sollten immer nurRelease
was SieResolve
.Wenn Sie den container in ähnlicher Weise, wie ich es mache, Sie können nicht rufen Sie
Release
überall in Ihrem code. SieResolve
Ihr root, aberDispose
aus dem container selbst kümmern, ihn zu veröffentlichen. Sie werden wahrscheinlich auch lösen, anderen Komponenten implizit über typisierte Fabriken, und in diesem Fall Sie sollte auch lassen Sie (über das Werk), aber das ist in der Regel es.Sodass das Endergebnis ist, es ist nicht so beängstigend wie es klingt auf den ersten.
ILifestyleManager
zu entscheiden, und in den kommenden Windsor 3 lifestyle-Managern haben auch mehr Kontrolle hier.