Zum Inhalt springen

C# - Strategie globale Speicherung von Objekt


Empfohlene Beiträge

Geschrieben

Hallo,

ich kenne mich leider in .Net, bzw. C# noch nicht so gut aus, deshalb hier eine Anfrage für eine Strategie. Hintergrund ist, dass ich für meine Firma eine neue Persistenzschicht mittels NHibernate programmiert habe. Alle (statischen) Methoden erwarten immer das Objekt ServiceExchangeContext (hier sind userspezifische Werte, wie z.B. userId, hinterlegt) um verschiedene Schichtenmodelle realisieren zu können, und sich nicht nur auf ein Frontend, z.B. Web, festlegen zu müssen. Soweit so gut ... nun dachte ich, dass ich alle Methoden nochmal überlade ohne das ExchangeContext-Objekt zu übermitteln, denn dieses kann ich bei einer Webanwendung mittels HttpContext.Current abholen - so dass es bei Webanwendungen nicht mehr nötig sein wird. Nun meine Frage. Gibt es so etwas ähnliches auch bei Library-, Consolen- und Formsanwendungen? .. ich dachte hier z.B. an ein Application-Objekt, so dass die Übergabe des ServiceExchangeContextes in Zukunft hier überflüssig sein wird. Wie würdet ihr das lösen?

Geschrieben
Warum nicht einfach der Klasse mit den statischen Methoden das Object als statisches Attribut hinzufügen?

Hi,

das wird ja schon (mit einem anderen Objekt) gemacht, nämlich die NHibernate-Session. Diese wird gespeichert, so dass es nicht zu den "berühmten" Lazy-Loading-Exceptions kommt. Nach einem Request (global.asax), bzw. nach dem Schließen wird das Objekt wieder freigegeben. Ich brauche aber ein globales Objekt, den ServiceExchangeContext, der global in der Applikation verfügbar sein muss .. z.B. Session .. ich möchte dieses Objekt nicht in eine Persistenzklasse stecken .. da hat es ja eigentlich auch nix verloren. Gibt es für Anwendungen (nicht Web) so etwas wie Session (oder Cache oder Application)?

Geschrieben
... In einer normalen Anwendung benötigst du sowas ja auch nicht, da diese ja nicht wie eine Webanwendung statuslos ist.

Ja, ich mache das jetzt einfach so. In einer Webanwendung hole ich mir das Objekt aus der Session - bei allen anderen Anwendungen setze ich Default-Werte ... außer es wird eine Benutzer-ID benötigt (statusabhängig), dann schmeiße ich eine Exception, dann muss der Benutzer überladenen Methode mit ServiceExchangeContext-Instanz aufrufen .. Danke für die Anregungen.

Geschrieben

Da gibts viele Möglichkeiten.

Ich würde eine Facade-Klasse schreiben bei der die Context-Infos nicht mit übergeben werden, die aber intern die Methoden der ursprünglichen Klasse aufruft. Das ganze dann in einen anderen Namespace packen, dann musst du bei der Implementierung nur noch

using MegaDing.Web;

bzw.

using MegaDing.Forms;

verwenden.

Noch schöner geht das allerdings mit aspektorientierter Programmierung, damit kannst du alle statischen Methoden automatisch mit bestimmten Parametern versorgen lassen, siehe hier: Aspektorientierte Programmierung für das Logging nutzen | dotnetpro | Das Profi-Magazin für Entwickler

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...