2012-10-26 122 views
0

我正在爲我的WCF項目採用溫莎城堡,並感到非常驚訝。但是,我有一個情景,我不知道溫莎城堡是否支持。 例如我有以下鏈接攔截在溫莎城堡的攔截器之間傳遞數據

​​

攔截1返回一些數據,我想,要在攔截2 可攔截2反過來它的工作原理,並返回我想要avaialbe數據3,4,攔截器。 真實情況是我們有一個WCF服務,Interceptor 1會將請求頭解析爲Header對象(用戶名,密碼等)。後面的攔截器和真正的方法將使用這個Header對象。 我知道我可以使用Session變量來傳輸數據,但它是一種內置,更優雅,更可靠的方式來處理這個問題?

回答

2

你提出什麼:

  1. 使得該方法的實現依賴於攔截器存在
  2. 介紹攔截器之間的相關性。

這些都是不好的事情。

概念攔截器是decorator pattern的一個很好的實現。換句話說,攔截器可以修改行爲,但是應該以對其下面的圖層透明的方式進行。攔截器不應該改變所調用的公共接口或依賴關係。攔截器可以依賴最終的方法,但最終的方法不應該依賴攔截器。

如果調用方法需要一個頭對象,我會創建一個明確的WCF行爲(可能是IDispatchMessageInspector)來滿足要求。

然後,所有的攔截器和最後的方法都可以假設頭對象存在,因爲創建它是公共接口的一部分(例如通過使用屬性將方法實現放在方法實現上)。

有趣的是,消息檢查器行爲的實現與攔截器基本相同。區別在於讓你的方法依賴於明確的行爲是明確的。使方法依賴於隱式攔截器不是。

1

我不認爲有任何內置的方式來做到這一點,雖然你可以使用Session,但我寧願爲此定義一個抽象。您可以在需要通信的所有攔截器中注入該抽象的相同實例。