Frage

Ich habe zwei Projekte, das DLL-Projekt, das meine Logik und Datenzugriff alle Sachen hat, und das ASP.NET-Projekt, das meine Formulare usw. der Fall ist.

Ich bin ein wenig verwirrt. Ich dachte, wenn ich den Namespace System.Web Verweis auf die DLL-Projekt hinzugefügt würde ich die Sitzungsstatusinformationen der ASP.NET-Seite verweisen können.

ich jede Seite nutzen, um die Session Informationen aus und gibt es an die DLL für die Verarbeitung zu erhalten, aber würde gerne Dinge verarbeiten, die von der DLL-Klasse direkt zu können (s).

Ist das möglich?

Ich habe mit dem Namespace System.Web nestelte und nur scheinen in der Lage einen Verweis auf die Session-Variablen zu erhalten.

Danke alle.

Jon

War es hilfreich?

Lösung

Es soll möglich sein, verwenden HttpContext.Current.Session

Bearbeiten

Während ja Ich bin damit einverstanden, sollten Sie nicht fest Paar Ihre Business Logic DAL oder etc Baugruppen ASP.Net Sitzung. Es gibt viele gültige Fälle für den Zugriff auf HTTP-Kontext außerhalb eines Web-Projekts.

Web Controls ist probally eines der besten Beispiele, wiederverwendbare Module http etc etc ...

Jetzt eine Option, wenn Sie Ihre DLL ziehen Sie das Material von Session haben wollen, ist zu abstrakt out Session. So könnte man eine Schnittstelle wie IStorage definiert, dass Ihre Bibliothek wird wissen, wie zu verwenden. Dann können Sie eine session oder MemoryStorage Klasse haben und IoC verwenden, um die sachgemäße Klasse in der Bibliothek Klassen zu injizieren. Dies gibt Ihnen die Freiheit, es zu codieren, wie man es wollte, ohne Binden Sie Ihren Code Session kodiert werden. Ach ja, und ein weiterer Vorteil, wenn es richtig gemacht kann verwendet werden, um nicht den Code zu Sitzung im Web entweder zu binden.

Andere Tipps

Solange die Versammlung im Rahmen der Session geladen wird, wird sie Zugriff haben.

Obwohl diese Art der engen Kopplung ist nicht wirklich zu empfehlen.

Sie können jederzeit verwenden HttpContext.Current.Session in der DLL, aber dies wird als schlechte Praxis betrachtet. Ein besserer Ansatz wäre es, die Werte in der Session-Wörterbuch, anstatt sie auf die DLL gespeichert passieren Referenzierung der Sitzung. Ein weiterer Vorteil, den Sie gewinnen, ist, dass der Code in der DLL nicht an die ASP.NET-Laufzeit gekoppelt werden, was bedeutet, es einfacher zu testen.

Wie gesagt von den anderen, können Sie immer verwenden HttpContext.Current.Session in der DLL, nehme ich es Ihr BAL ist, aber Sie müssen wirklich vorsichtig sein. Was passiert, wenn Ihre DLL später von einem Windows-Dienst oder einer anderen App verbraucht wird, die keine Httpcontext hat? Jedes Mal, wenn ich getan habe dies es immer in einer Eigenschaft get-Methode, wo ich den Versuch wickeln zu HttpContext.Current.Session in einem Try-Catch-Block zugreifen und wenn etwas schief geht ich repull die benötigten Daten aus der db.

Verwenden Sie keine HttpContext.Current.Session als DLL mit dem Web Application nicht immer ausgeführt wird. Es kann mit jeder anderen Anwendung wie Windows, Console itc laufen.

Es ist besser, eine Methode zu verwenden, die actully einen Parameter akzeptieren, der Sitzungswert bilden wird kommen, wenn Sie ASP.Net-Anwendung verwenden, sonst wird es keine Abhängigkeit von der Anwendung sein. Wenn Ihr DLL-Projekt bereits entwickelt und Sie versuchen, die exsiting Business-Logik zu ändern, dann nein, nicht Ihre exsiting Methode ändern, verwenden Sie eine Überlastung Methode.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top