2013-09-26 18 views
1

我有一個Web API項目,我打算使用從ActionFilterAttribute繼承的屬性以標準方式進行日誌記錄。作爲該日誌記錄的一部分,我想從方法中的HttpActionContext中提取一些值。然後我想將這些作爲OnActionExecuted的一部分。我爲此屬性指定了[AttributeUsage(AttributeTargets.Class)]。我的假設是我的自定義屬性將與它所應用的類一致地實例化,並且具有與應用該屬性的類相同的生命週期。我找不到任何具體的支持。我做了一些測試,似乎是如何工作的,但我擔心我的測試太有限。我假設對同一控制器的多次調用會生成該控制器的新實例,從而生成該屬性的新實例。我基本上擔心我作爲OnActionExcecuting的一部分檢索到的數據的線程安全性。自定義屬性對象生存期和隔離

任何人都知道任何資源或鏈接,可以證實或否認我的假設?

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+0

指出,感謝鏈接 – mckeejm

回答

4

這取決於你將要使用什麼。

高速緩存Web API中的屬性(過濾器)(過濾器管道爲private readonly Lazy<Collection<FilterInfo>> _filterPipeline;並僅初始化一次)。 see here

因此,如果您在屬性的構造函數中初始化某些內容,它將在後續執行中保持不變。

但是,創建的HttpActionContext是爲來自HttpControllerContextHttpActionDescriptor的每個請求創建的,然後傳遞到管道中的每個緩存過濾器。 see here

因此,即使過濾器的實例被重用,方法中上下文的值也是特定於特定請求的。

+0

因此,Web API中的屬性(過濾器)的類級別變量是不是線程安全的是否安全? – mckeejm

相關問題