设置用户上下文

时间:2010-01-07 11:45:08

标签: .net architecture

我的businesslayer \数据访问库正由Web应用程序和wcf服务使用。我需要为这些应用程序的每个请求设置当前用户上下文,其中包含userid,ip,应用程序类型等等。

该库显然不知道正在使用它的应用程序类型。

现在我无法将此信息保存在静态变量中,因为后续请求会覆盖旧值。而且我不想将此变量传递到可能需要的每个类中,例如日志记录组件。

这可能是一个愚蠢的问题,但有没有办法创建一个线程级静态变量,如OperationContext.Current或HttpContext.Current(将在当前请求结束时消失的东西)

或者我可以通过其他方式实现此功能?

2 个答案:

答案 0 :(得分:2)

默认方法是使用Thread.CurrentPrincipal。它应该满足您的所有要求。

通常,IPrincipal是在.NET中建模用户上下文的标准基础。例如,HttpContext.User是一个IPrincipal。

答案 1 :(得分:0)

感谢所有帮助,但我使用了此链接中提出的解决方案:http://elegantcode.com/2009/01/17/abstracting-request-state/

这样我就不必担心线程静态变量在每个请求周期结束时保留它们的值,因为线程池并且仍然设法保留在包含用户凭证的线程中的任何地方都可访问的某些对象