Laden...

Unity Dependency Injection: Wie Property(Objekt) aus statischer Klasse in andere Klasse injizieren

Erstellt von M@TUK vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.001 Views
M
M@TUK Themenstarter:in
402 Beiträge seit 2005
vor 11 Jahren
Unity Dependency Injection: Wie Property(Objekt) aus statischer Klasse in andere Klasse injizieren

Hi,

ich hab grad folgendes Problem.

In einer MVC-Application habe ich eine statische Wrapper-Klasse für den Zugriff auf die Session-Daten.

Damit nicht das komplette User-Objekt in der Session liegt wird nur die UserId in der Session gehalten und das UserObjekt immer aus der Datenbank geladen. (Grund ist dass die Application in einer WebFarm laufen soll) Das UserObjekt ist ebenfalls als Property der statischen Klasse aufrufbar.

Ich kann damit von "überall" mit


var foo = SessionWrapper.UserId;
var user = SessionWrapper.User;

auf die UserId oder das UserObjekt zugreiffen.

Nun benötige ich aber das aktuelle UserObjekt in einem Repository um Daten basierend auf dem UserObjekt aus der Datenbank zu laden.

Die Repositories werden über einen UnityContainer instanziert und bekommen schon den DbContext und andere Objekte im Konstruktor injiziert.

Wie kann ich es nun realisieren dass auch das UserObjekt aus der statischen Wrapperklasse injiziert wird. Ich möchte damit vermeiden in der Repository-Klasse das UserObjekt direkt aus der Wrapper-Klasse zu holen. Die Repository-Klasse soll nix davon mitbekommen dass das UserObjekt aus der "Session" kommt.

thx

M
M@TUK Themenstarter:in
402 Beiträge seit 2005
vor 11 Jahren

Nach ein wenig rumprobieren hab ich jetzt eine "Lösung" gefunden,

ob das jetzt "schön" ist, ist aber eine andere Frage 😉

Ich hab die Klasse als Typ mit einem eigens erstellten Lifetimemanager registriert und dieser Lifetimemanager gibt immer das Objekt aus der statischen Klasse zurück.

Vielleicht gibt's ja noch andere Lösungswege.

LG

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo M@TUK,

alles steht und fällt doch damit, was du bei dem verwendeten Dependency Injection Mechanismus so alles zur Erzeugung der Objekte registrieren kannst. Wenn du dort nur Klassennamen angeben kannst und keine (Create-)Methode oder Properties, dann ist deine Lösung wohl der einzige Weg, auch wenn man über den Namen der neuen Klasse streiten kann und auch darüber, ob man überhaupt eine neue Klasse braucht. Wenn du erlaubst, dass die bestehende (bisher statische) SessionWrapper-Klasse auch instanziiert werden kann und ihr noch eine (zusätzliche) Instanz-Methode oder -Property gibst, mit der man das UserObjekt (ebenfalls) abrufen kann, könntest du dir die neue Klasse sparen.

herbivore