首先,我希望基于上下文的存储在整个框架中是一致的!
话虽如此,我正在寻找一种优雅的解决方案,以使这些属性在 ASP.NET、WCF 和任何其他多线程 .NET 代码中安全。这些属性位于一些低级跟踪助手中(如果您想知道为什么它们是内部的,这些属性会通过方法公开)。
我宁愿不依赖于不需要的程序集(如 System.Web 等)。我不想要求任何人使用此代码来配置任何东西。我只是想让它工作;)虽然这可能太高了......
有人有什么技巧吗?(我看过 Spring 的实现)
internal static string CurrentInstance
{
get
{
return CallContext.LogicalGetData(currentInstanceSlotName) as string;
}
set
{
CallContext.LogicalSetData(currentInstanceSlotName, value);
}
}
internal static Stack<ActivityState> AmbientActivityId
{
get
{
Stack<ActivityState> stack = CallContext.LogicalGetData(ambientActivityStateSlotName) as Stack<ActivityState>;
if (stack == null)
{
stack = new Stack<ActivityState>();
CallContext.LogicalSetData(ambientActivityStateSlotName, stack);
}
return stack;
}
}
更新
我所说的安全并不是同步的。关于这个问题的背景在这里