Question

J'ai deux projets, le projet DLL qui contient toute la logique nécessaire pour accéder aux données et à la logique, et le projet ASP.NET, qui gère les formulaires, etc.

.

Je suis un peu confus. Je pensais que si j’ ajoutais la référence d’espace de noms System.Web au projet DLL, je pourrais référencer les informations sur l’état de la session de la page ASP.NET.

Je pourrais utiliser chaque page pour obtenir les informations de session et les transmettre à la DLL pour le traitement, mais j'aimerais pouvoir traiter les éléments directement à partir de la ou des classes de DLL.

Est-ce possible?

J'ai manipulé l'espace de noms System.Web et semble pouvoir obtenir une référence à la variable Session.

Merci à tous.

Jon

Était-ce utile?

La solution

Vous devriez pouvoir utiliser HttpContext.Current.Session

Modifier

Même si je suis d’accord, vous ne devez pas associer étroitement vos assemblys Business Logic DAL ou etc à une session ASP.Net. Il existe de nombreux cas valides pour accéder à un contexte HTTP en dehors d'un projet Web.

Web Controls est probablement l'un des meilleurs exemples: modules http réutilisables, etc., etc., etc.

.

Désormais, une option si vous souhaitez que votre DLL extraye les éléments de la session consiste à résumer la session. Vous pouvez donc définir une interface comme IStorage, que votre bibliothèque saura utiliser. Ensuite, vous pouvez avoir une classe SessionStorage ou MemoryStorage et utiliser IoC pour injecter la classe appropriée dans vos classes de bibliothèque. Cela vous donne la liberté de coder comme vous le souhaitez sans lier votre code à Session. Oh, et un autre avantage, si cela est fait correctement, peut être utilisé pour ne pas lier votre code à une session sur le Web.

Autres conseils

Tant que l'Assemblée est chargée dans le cadre de la session, elle y aura accès.

Bien que ce type de couplage étroit ne soit pas vraiment recommandé.

Vous pouvez toujours utiliser HttpContext.Current.Session dans votre DLL, mais cela est considéré comme une mauvaise pratique. Une meilleure approche consisterait à transmettre les valeurs stockées dans le dictionnaire de session à votre DLL au lieu de faire référence à la session. Vous obtiendrez un autre avantage: le code de votre DLL ne sera pas associé à l'exécution ASP.NET, ce qui simplifiera les tests.

Comme l'ont dit les autres, vous pouvez toujours utiliser HttpContext.Current.Session dans votre DLL. Je suppose que c'est votre BAL, mais vous devez être très prudent. Que se passe-t-il si votre DLL est utilisée par la suite par un service Windows ou par une autre application sans HTTPContext? Chaque fois que j'ai fait cela, cela a toujours été dans une méthode get, où je résume la tentative d'accès à HttpContext.Current.Session dans un bloc catch catch et si quelque chose ne va pas, je récupère les données nécessaires de la base de données.

N'utilisez pas HttpContext.Current.Session car votre dll ne fonctionnera pas toujours avec l'application Web. Il peut fonctionner avec n'importe quelle autre application comme Windows, Console itc.

Il est préférable d’utiliser une méthode qui accepte effectivement un paramètre, qui viendra sous forme de valeur de session, si vous utilisez ASP.Net Application, sinon il n’y aura aucune dépendance de l’application. Si votre projet dll est déjà développé et que vous essayez de modifier la logique métier existante, alors non, ne modifiez pas votre méthode existante, utilisez une méthode Overload.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top