mOSSpOWER Geschrieben 30. Juli 2007 Geschrieben 30. Juli 2007 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? Zitieren
Guybrush Threepwood Geschrieben 30. Juli 2007 Geschrieben 30. Juli 2007 Warum nicht einfach der Klasse mit den statischen Methoden das Object als statisches Attribut hinzufügen? Zitieren
mOSSpOWER Geschrieben 30. Juli 2007 Autor Geschrieben 30. Juli 2007 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)? Zitieren
Guybrush Threepwood Geschrieben 31. Juli 2007 Geschrieben 31. Juli 2007 Gibt es für Anwendungen (nicht Web) so etwas wie Session (oder Cache oder Application)? Nein nicht das ich wüßte, zumindest nicht so wie du dir das vorstellst. In einer normalen Anwendung benötigst du sowas ja auch nicht, da diese ja nicht wie eine Webanwendung statuslos ist. Zitieren
mOSSpOWER Geschrieben 7. August 2007 Autor Geschrieben 7. August 2007 ... 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. Zitieren
Argbeil Geschrieben 8. August 2007 Geschrieben 8. August 2007 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 Zitieren
Empfohlene Beiträge
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.