2012-01-11 78 views
0

我在我的應用中使用了一種簡單的消息代理,其中插件可以註冊以通知自定義事件。嗯...是這樣的:發佈/訂閱不同的代理類型

class MessageBroker 
{ 
    Dictionary<string,List<Delegate>> SubscribersToEvent; 

    void SubscribeToEvent(string eventName, Delegate callback); 
    object RaiseEvent(string eventName); 
} 

這工作得很好,很正常,只要我使用相同的委託(和所有事件的相同的參數列表)

有沒有乾淨的方式我可以訂閱/觸發使用自定義代理的事件的參數數量和類型可能會因每種類型的事件而發生變化?

即。最後,我想要做的事,如:

messageBroker.RaiseEvent("button1_click", new object[] { button1, parameter2, param2}) 

而這又是打電話

void CallbackToButton1_click(Buttton btn, string p1, int p2) 
+0

這將是可行的與反思,以速度爲代價。 – 2012-01-11 23:19:52

回答

0

我已經通過簡單地在字典中傳遞給解決了類似的問題訂閱方法(S)委託作爲附加參數,僅保存特定於該事件的所有屬性。缺點是編譯器不能強制所有參數都被傳遞,但它已經很好地服務了我,實際上從來沒有引起任何問題。