まず、コンテキストベースのストレージがフレームワーク全体で一貫していることを望みます!
そうは言っても、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;
}
}
アップデート
安全とは、同期を意味するものではありません。問題の背景はこちら