我可以使用ASP.NET会话[]变量外部DLL
-
19-08-2019 - |
题
我有两个项目,DLL项目拥有我所有的逻辑和数据访问的东西,这确实我的形式等。
ASP.NET项目我有点混乱。我想如果我加入System.Web命名空间参考DLL项目,我将能够引用ASP.NET页面的会话状态信息。
我可以使用每个页面出获取会话信息,并把它传递给DLL文件的处理,但会喜欢能够直接从DLL类(S)处理的事情。
这是可能的?
我摆弄System.Web命名空间,只是似乎能够得到的会话变量的引用。
由于所有
乔恩
解决方案
您应该能够使用HttpContext.Current.Session
修改
虽然是我同意你不应该紧密结合你的业务逻辑DAL或等组件,以ASP.Net会话。有很多有效的情况下访问一个Web项目以外的HTTP上下文。
Web控件是probally的一个最好的例子,可重复使用的HTTP模块等等...
现在,如果你希望你的DLL从拉届东西一个选项是抽象出来的会话。所以,你可以这样定义的IStorage接口,使您的图书馆将知道如何使用。然后你就可以有一个sessionStorage的或MemoryStorage类,并使用国际奥委会注入合适的类到你的库类。这给了你自由,你怎么想它是不会阻碍你的代码,会话编码的代码吧。哦,另外一个好处,如果处理得当,可以用于你的代码不打领带,以会话的网络无论是。
其他提示
只要组件处于Session范围加载时,它可以访问。
虽然并不推荐使用这种类型的紧耦合。
您可以随时使用HttpContext.Current.Session在您的DLL,但这被认为是不好的做法。更好的方法是将存储在会话字典中的值传递到您的DLL,而不是它引用会话。您将获得另一个好处是,在您的DLL的代码不会被耦合到ASP.NET运行时这意味着它会更容易测试。
正如有人说,你可以随时使用HttpContext.Current.Session在您的DLL,我想这是你的BAL,但你需要真正小心。如果你的DLL后来被Windows服务,或一些其他的应用程序,没有一个HttpContext的消耗?每当我做这个它一直在属性get方法,我包裹试图访问一个try catch块HttpContext.Current.Session如果有什么不顺心我从DB repull所需要的数据。
不要使用HttpContext.Current.Session为您的DLL不会与Web应用程序始终运行。它可以用相同的Windows,控制台ITC任何其他应用程序运行。
这是更好地使用一种方法,其actully接受一个参数,它会形成会话的价值,如果你正在使用ASP.Net应用程序,否则不会有应用程序的任何依赖。如果您的DLL项目已经开发和您要修改exsiting业务逻辑则没有,不修改exsiting方法,使用重载方法。