| 

.NET C# Java Javascript Exception

2
Ich verwende in ASP.NET Enterprise Library Unity um meine Objekte zu erzeugen. Ich will auch meinen LINQ-DataContext per Unity erzeugen lassen und zwar soll der DataContext innerhalb desselben Requests immer dieselbe Instanz haben. Das ist nötig, damit ich mit SubmitChanges auch alle Änderungen erwische (die sonst über mehrere DataContext's verteil wären). Wie kann ich Objekte pro Request instanziieren lassen, so dass mehrmalige Aufrufe an Resolve<DataContext>() dasselbe Objekt liefern?
01.09.2009
alexander 860 2 9
1 Antwort
2
Unity bietet für solche Szenarien die LifetimeManagers an. Damit kann man kontrollieren, wie lange eine Instanz von Unity zurückgegeben wird. Standardmässig gibt es z.B. den ContainerControlledLifetimeManager, der die Instanz eines Objektes so lange am Leben hält, wie der zugehörige Unity-Container existiert. Dies ist dann praktisch ein Singleton-Objekt.

Man kann aber auch mit dem ExternallyControlledLifetimeManager arbeiten (Dieser arbeitet intern mit WeakReferences und erlaubt dem GarbageCollector von .NET die Objekte zwischenzeitlich abzuräumen) oder einen komplett eigenen schreiben.

Eine ausführliche Erklärung findet man hier:
http://msdn.microsoft.com/en-us/library/cc440953.aspx
02.09.2009
Mischa 345 1 3
Mischa 345 1 3
Ein guter Ansatz. Wie kann ich denn _pro Request_ Objekte vorhalten? Derselbe DataContext darf unter keinen Umständen dem nächsten Request bereitstehen.
alexander 02.09.2009
Am besten einen eigenen LifetimeManager schreiben.
Das ganze kannst Du Dir hier anschauen für die Session.

http://frederikm.blogspot.com/2008/05/unity-lifetime-management-in-web.html

Lässt sich aber prima auf den Request übertragen.
Mischa 02.09.2009

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH