我有两个项目,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方法,使用重载方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top