Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

Unity Dependency Injection: Wie Property(Objekt) aus statischer Klasse in andere Klasse injizieren
[email protected]
myCSharp.de - Member



Dabei seit:
Beiträge: 407

Themenstarter:

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

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
[email protected]
myCSharp.de - Member



Dabei seit:
Beiträge: 407

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo [email protected],

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
private Nachricht | Beiträge des Benutzers