Asp.net 如何将全局变量传递给引用的程序集?
如何将全局变量传递给引用的程序集 我正在修改asp.net应用程序。需要记录所有员工(网站的当前用户)的操作,如保存新客户或更新发票数据。UI层正在调用引用的程序集BLL.dll 我想将当前雇员传递给引用的程序集。传递的Employee应该是该dll中所有静态方法的共享帐户。它应该是线程安全的,因为员工可以根据请求进行更改 我无法公开BLL中的静态字段,因为员工存储在会话状态 我需要一些不静态、全局、可由程序集(UI层和BLL.dll)访问的、线程安全的东西。 我正在考虑使用一些存储在当前线程对象中的变量。但我不知道我到底应该做什么 有工作吗Asp.net 如何将全局变量传递给引用的程序集?,asp.net,.net,global-variables,Asp.net,.net,Global Variables,如何将全局变量传递给引用的程序集 我正在修改asp.net应用程序。需要记录所有员工(网站的当前用户)的操作,如保存新客户或更新发票数据。UI层正在调用引用的程序集BLL.dll 我想将当前雇员传递给引用的程序集。传递的Employee应该是该dll中所有静态方法的共享帐户。它应该是线程安全的,因为员工可以根据请求进行更改 我无法公开BLL中的静态字段,因为员工存储在会话状态 我需要一些不静态、全局、可由程序集(UI层和BLL.dll)访问的、线程安全的东西。 我正在考虑使用一些存储在当前线程对
谢谢基本上,你的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; }
}
然后在web应用程序中,使用会话状态实现IEmployeeContextImplementation
,并在应用程序启动时仅调用SetImplementation
一次
然而,会话状态仅在请求上下文中足够好。如果您需要它在不同的线程上运行,则必须显式地将其传递到不同的线程。很好的解决方案,它应该可以工作。我认为我们不再需要锁,因为会话是线程安全的。锁在那里,以防其他人试图设置实现。