2010-12-06 58 views
3

我已經做了以下內容:統一自動注射

  1. 通過ILogger接口統一註冊我的記錄器 的一個實例。
  2. 創建一個接口, ILoggableObject,有一個方法, 掛鉤(ILogger記錄器),注入我的記錄器。

我想做到這一點:

每次我要求從團結的決議,如果該對象實現ILoggableObject,自動注入通過鉤子方法的ILogger接口。

我認爲這是可以通過攔截或政策?

任何幫助都會很棒。

+3

爲什麼你不使用構造函數注入,這是默認的機制?只需將`Hook`方法重命名爲公共構造函數(具有相同的參數)。 – Steven 2010-12-06 16:10:39

+0

爲什麼不把ILogger傳遞到需要使用日誌記錄行爲的任何對象? – 2010-12-06 16:11:10

+0

我就是這麼做的。這種方法的問題是當你的對象開始使用多個接口時,你最終會得到一個具有10個參數的構造函數。然後,另一個想從該基類繼承的開發者必須提供他/她不需要看到的所有構造函數參數。 – poindexter12 2010-12-06 16:15:33

回答

2

你正在尋找的是在Unity中的TypeInterception。在這裏看到:http://msdn.microsoft.com/en-us/library/ff660861(PandP.20).aspx

而且,這裏http://msdn.microsoft.com/en-us/library/ff660848(v=PandP.20).aspx

你想攔截調用構造函數和注射記錄儀代表調用代碼沒有他們是更聰明。

雖然我沒有做過這之前,我相信你可以做你想做的使用Intercept.NewInstance()http://msdn.microsoft.com/en-us/library/ff662093(PandP.20).aspx

1

這是一個可怕的方式(嘗試)做依賴注入。使用構造函數注入,並將ILogger注入(通過構造函數)到消費者中,該消費者現在擁有Hook方法。

0

雖然我真的很喜歡團結的IoC/DI,我不知道它是正確的工具來完成你想要做的事情。

您可能會考慮使用PostSharp或類似工具來查看面向方面的編程。這將允許您添加日誌記錄或其他橫切關注點而不更改正在檢測的類。