2013-05-08 108 views
1

我們的應用程序中的生命週期範圍很小。能夠截獲在autofac中註冊的所有服務會很有趣。通過這樣做,我們可以確切地看到代碼在每個生命週期範圍內使用的路徑以及使用哪個方法參數。不是真的可用於生產,但是對於調試/診斷/重構來說真的非常棒,因爲您可以創建整個圖片而不僅僅是單元級別。攔截所有服務

但是AFAIK只能爲每個註冊註冊一個攔截器?

回答

0

使用Autofac.Extras.DynamicProxy2庫開箱即可支持這樣的事情。你可能實現類似的東西,使用類似於Autofac.Extras.DynamicProxy2的填充碼的每個組件處理OnActivating一個模塊,但你會遇到麻煩一樣...

  • 你想通過這門課攔截器或接口攔截器?正在解決的服務類型與支持它的組件的限制類型將影響您想要創建的動態代理類型。我相信目前的A.E.D2代碼只會爲/或者不是每個類實現的接口生成攔截。
  • 您是否使用WCF客戶端代理?客戶代理是他們自己的一個有趣的野獸,所以你必須特別處理它們。你會在A.E.D2中看到。

一般像這樣的問題,通過面向方面編程解決方案(例如,PostSharp)或分析器得到解決(例如,ANTS)...或兩者的組合。如果您有能力,您可能需要查看這些解決方案。

有關我在談論什麼類型的模塊實現的示例,check out the log4net integration page on the Autofac wiki。這顯示瞭如何處理系統中每個組件的OnPreparing。你可以做同樣的事情,但是應該使用OnActivating來代替use the sample on the Lifetime Events wiki page來向你展示如何將一個已解決的事情交換爲另一個(交換生成的代理的真實對象)。