Domanda

Ho due progetti, il progetto DLL che ha tutte le mie cose logiche e di accesso ai dati, e il progetto ASP.NET che fa i miei moduli ecc.

Sono un po 'confuso. Ho pensato che se avessi aggiunto il riferimento allo spazio dei nomi System.Web al progetto DLL sarei stato in grado di fare riferimento alle informazioni sullo stato della sessione della pagina ASP.NET.

Potrei usare ogni pagina per ottenere le informazioni sulla sessione e passarle alla DLL per l'elaborazione, ma mi piacerebbe poter elaborare le cose direttamente dalle classi DLL.

È possibile?

Ho armeggiato con lo spazio dei nomi System.Web e mi sembra di riuscire a ottenere un riferimento alla variabile Session.

Grazie a tutti.

Jon

È stato utile?

Soluzione

Dovresti essere in grado di utilizzare HttpContext.Current.Session

Modifica

Anche se sì, sono d'accordo che non dovresti accoppiare strettamente i tuoi insiemi DAL di Logica aziendale o ecc alla sessione ASP.Net Esistono molti casi validi per accedere al contesto HTTP al di fuori di un progetto Web.

Web Controls è probabilmente uno dei migliori esempi, moduli http riutilizzabili ecc ecc ...

Ora un'opzione se vuoi che la tua DLL estragga i contenuti da Session è quella di estrarre la sessione. Quindi potresti definire un'interfaccia come IStorage, che la tua biblioteca saprà usare. Quindi puoi avere una classe SessionStorage o MemoryStorage e usare IoC per iniettare la classe appropriata nelle tue classi di libreria. Questo ti dà la libertà di codificarlo come volevi che fosse codificato senza legare il tuo codice a Session. Oh e un altro vantaggio se fatto correttamente può essere usato per non legare il codice alla sessione nel web.

Altri suggerimenti

Finché l'Assemblea sarà caricata nell'ambito della Sessione, avrà accesso.

Anche se questo tipo di accoppiamento stretto non è davvero raccomandato.

Puoi sempre usare HttpContext.Current.Session nella tua DLL ma questo è considerato una cattiva pratica. Un approccio migliore sarebbe passare i valori memorizzati nel dizionario della sessione alla DLL anziché fare riferimento alla sessione. Un altro vantaggio che otterrai è che il codice nella tua DLL non sarà accoppiato al runtime ASP.NET, il che significa che sarà più facile testarlo.

Come detto dagli altri, puoi sempre usare HttpContext.Current.Session nella tua DLL, presumo sia il tuo BAL, ma devi essere davvero attento. Cosa succede se la DLL viene successivamente utilizzata da un servizio Windows o da qualche altra app che non ha HTTPContext? Ogni volta che l'ho fatto è sempre stato in un metodo get get in cui ho racchiuso il tentativo di accedere a HttpContext.Current.Session in un blocco catch try e se qualcosa va storto rispondo i dati necessari dal db.

Non utilizzare HttpContext.Current.Session poiché la tua dll non funzionerà sempre con l'applicazione Web. Può funzionare con qualsiasi altra applicazione come Windows, console itc.

È meglio utilizzare un metodo che accetta effettivamente un parametro, che verrà dal valore di sessione, se si utilizza l'applicazione ASP.Net, altrimenti non vi sarà alcuna dipendenza dell'applicazione. Se il tuo progetto dll è già stato sviluppato e stai provando a modificare la logica aziendale esistente, no, non modificare il metodo esistente, utilizza un metodo di sovraccarico.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top