我正在填充一个表示会话变量并存在于类库中的类实例。 我需要填充一个需要访问Request
对象的属性。 我了解可以使用System.Web.HttpContext.Current.Request
来获取请求对象?
这是一个好的做法吗?有些东西告诉我应该在具有System.Web
命名空间的控制器(或基础控制器)中完成此操作。
我正在填充一个表示会话变量并存在于类库中的类实例。 我需要填充一个需要访问Request
对象的属性。 我了解可以使用System.Web.HttpContext.Current.Request
来获取请求对象?
这是一个好的做法吗?有些东西告诉我应该在具有System.Web
命名空间的控制器(或基础控制器)中完成此操作。
这不是一种不好的做法 - 对象是可用的 - 如果你的设计决定需要访问它,那么可以毫不犹豫地这样做。如果你感觉更加清晰,一种选择是在类的构造函数中传入请求的实例:
System.Web.HttpContext.Current
,但这是不好的实践,因为它使你的类库在web应用程序之外完全无法使用(如果通过它访问Sessions,则在大多数情况下也无法用于Web服务)。Response.OutputStream
传递给该类(该类将其视为通用Stream对象)。
来源:http://forums.asp.net/post/1311405.aspx
从根本上说,只要您对 System.Web.Abstractions
进行依赖,并将引用传递到您的类中的 HttpRequestBase
,这样做就没有什么问题。 此程序集中的类未封装,所有成员均为虚拟成员,这意味着您的类仍然可以进行测试。
有关更多信息,请参见以下SO问题的答案。
System.Web
命名空间耦合在一起吗?如果将来这个类库移到 Web 项目之外,那么它就不会知道任何关于HttpContext
对象的东西了,这是一个有效的论点吗? - DotnetDude