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?
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.
Ein guter Ansatz. Wie kann ich denn _pro Request_ Objekte vorhalten? Derselbe DataContext darf unter keinen Umständen dem nächsten Request bereitstehen.