0

如何将全局变量传递给引用的程序集?

我正在修改一个 asp.net 应用程序。需要记录所有员工(网站的当前用户)的操作,例如保存新客户或更新发票数据。UI 层正在调用引用的程序集 BLL.dll。

我想将当前员工传递给引用的程序集。传递的 Employee 应该在该 dll 中的所有静态方法之间共享。它应该是线程安全的,因为 Employee 可以跨请求更改。

我无法在 BLL 中公开静态字段,因为 Employee 存储在会话状态中。

我需要一些不是静态的、全局的、可由两个程序集(UI 层和 BLL.dll)访问且线程安全的东西。

我正在考虑使用存储在当前线程对象中的一些变量。但我不知道我到底应该做什么??

任何解决方法?

谢谢

4

1 回答 1

2

基本上,您的 BLL 中需要一些可以获取参考的东西。您可以使用带有接口的策略模式。

// IN BLL.dll

public interface IEmployeeContextImplementation 
{
   Employee Current { get; }
}

public static EmployeeContext 
{
   private static readonly object ImplementationLock = new object();
   private static IEmployeeContextImplementation Implementation;

   public static void SetImplementation(IEmployeeContextImplementation impl)
   {
      lock(ImplementationLock)
      {
         Implementation = impl;
      }
   }
   public static Employee Current { get { return Implementation.Current; }
}

然后在您的网络应用程序中,IEmployeeContextImplementation使用会话状态实现并SetImplementation在应用程序启动时仅调用一次。

但是,会话状态仅在请求的上下文中足够好。如果您需要它在不同的线程上运行,则必须将其显式传递给不同的线程。

于 2012-05-08T14:25:04.773 回答