.net 常識 CallContext
關于HttpContext.Current可能挺多人都有疑問的
他究竟是怎么實現的呢
為什么每個不同的請求去訪問一個靜態成員Current 能得到不同的結果呢?
很明顯的這個靜態對象和當前調用的Context有關
其內部實現類似于 CallContext.SetData() 和CallContext.GetData()
通過SetData保存的數據 是和當前方法的調用堆棧有關的,例如你在方法A中間SetData
然后方法A中Call了方法B 那么B中可以用GetData()獲得數據,反過來也是ok的
只要在這個方法堆棧上 都可以互相使用這些Data
例如以下代碼
public static WcfTransaction Transaction
{
get
{
return CallContext.LogicalGetData("WcfTransaction") as WcfTransaction;
}
set
{
CallContext.LogicalSetData("WcfTransaction", value);
}
}
PS:LogicalGetData 和 GetData的差別主要是 LogicalGetData能適應更多的情況
例如在跨AppDomian的時候 在外面SetData 在另外一個AppDomain里面GetData就獲取不到值了 ,而LogicalGetData 還能繼續使用,
此外如果讓上文中的WcfTrancation 繼承特定接口 也可以自動傳播到更多的地方..不過生命周期就不好控制了
CallContext是和調用堆棧相關的
,下篇介紹和線程相關的數據....雖然大部分時候這兩個有很大重疊..
浙公網安備 33010602011771號