2010-01-13 52 views
5

如何將事件處理程序注入(附加)到由Unity IoC容器創建的實例的.net事件?如何使用Unity將事件處理程序注入到事件中

例子:我有一個通過一個標準的.NET事件報告錯誤類:

class CameraObserver 
{ 
    public event Action<Exception> UnhandledException;  
    [...] 
} 

我還有一個類,它是承擔一切處理這些事件:

class CrashMonitor 
{ 
    public static void HandleException(Exception x) 
    { ... } 
} 

我想要做的就是自動將CrashMonitor的Handler注入到CameraObserver的每個實例中,就像這個僞代碼一樣:

UnityContainer container = new UnityContainer(); 
container.RegisterInstance<Action<Exception>>(CrashMonitor.HandleException) 
    .RegisterType<CameraObserver>(new InjectionEvent(UnhandledException)); 

var observer = container.Resolve<CameraObserver>(); 
// CrashMonitor.HandleException is now attached to observer.UnhandledException 

有沒有辦法用Unity做到這一點?我可以想到一個醜陋的解決方法,比如從CameraObserver派生一個特殊的構造函數intendend來進行依賴注入或者方法注入。但是這會使系統更復雜(因爲你必須編寫代碼)。我會天真地期望你可以在事件上添加一個[Dependency]屬性,一切都應該工作。

回答

3

我也問過同樣的問題,統一討論小組在CodePlex上

http://unity.codeplex.com/Thread/View.aspx?ThreadId=80728

,答案是「沒有什麼」。有一個EventBroker的演示,但它做的更復雜(發佈者和訂閱者的自動裝配)。我仍然認爲KISS機制注入事件很有用,並開始自行完成。

+0

嘿,克里斯蒂安,你有沒有發現更多關於這個,或你堅持你的原定製設計?我正在嘗試使用Unity的「純粹」MVVM設計,該設計最初有一個從基本ViewModel繼承的CloseCommand,在這裏我將一個委託傳遞給一個自定義的EventHandler。工作很好,直到我試圖用Unity來注入所有東西,然後它立即崩潰。如果你有一個解決方案可以幫助我,我會非常感激一些智慧。謝謝! – 2011-06-19 13:56:18

相關問題