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

时间:2012-05-08 14:20:19

标签: asp.net .net global-variables

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

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

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

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

我需要一些非静态的,全局的,可由两个程序集(UI层和BLL.dll)访问,以及线程安全。

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

任何workarrounds ??

由于

1 个答案:

答案 0 :(得分: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一次。

但是,会话状态仅在请求的上下文中足够好。如果你需要它去另一个线程,你必须明确地将它传递给另一个线程。