使用不同的委托类型发布/订阅

时间:2012-01-11 23:16:24

标签: c#

我在我的应用程序中使用了一种简单的消息代理,其中插件可以注册以通知自定义事件。嗯..像这样:

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) 

2 个答案:

答案 0 :(得分:0)

我通过简单地将字典传递给委托作为附加参数解决了类似的问题,该附加参数仅包含特定于该事件的所有属性。缺点是编译器不能强制执行所有参数传递,但它对我有用,并且实际上从未引起任何问题。

答案 1 :(得分:0)