首先,我希望基於上下文的存儲在整個框架中保持一致!這就是說,我正在尋找一個優雅的解決方案,使這些屬性在ASP.NET,WCF和任何其他多線程.NET代碼中保持安全。這些屬性位於一些低級別的跟蹤幫助器中(如果您想知道爲什麼它們是內部的,則通過方法公開這些屬性)。尋求基於上下文的一致性存儲
我寧願沒有依賴不需要的程序集(如System.Web等)。我不想要求任何人使用此代碼來配置任何東西。我只是想要它的工作;)這可能是一個高的秩序,雖然...
任何人都有他們的袖子的招數? (我已經看到了春天的實現)
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;
}
}
更新
通過安全我的意思並不是同步的。關於這個問題的背景here
我沒有太多的報價,但我也對這個問題感興趣。 FWIW我記得在某些源代碼倉庫(可能是Castle,NInject或NHibernate)中看到了幾種像IContext這樣的實現,我猜想它們可能會被直接插入到應用程序中。每個IContext實現使用不同的技術(CallContext,HttpContext,Thread.SetData等)。我不確切知道它們是如何被使用的,但我的第一個想法是它要抽象出「背景」。無論如何,我可以看到我能否找到我之前找到的內容併發布鏈接。它可能是有用的。 – wageoghe 2010-12-14 19:58:05