将事件转发到所选实例

时间:2014-02-03 14:39:32

标签: c# events proxy forwarding

是否有一个很好的策略可以在运行时将多个事件的接收者(假设一个对象实例A)交换到另一个实例B(或多个实例)?例如,想一个菜单栏,其中包含一系列可以在当前选定的多个对象上执行的操作。

现在一个选项是将所有对象的处理程序连接到单击事件,让处理程序过滤掉相关的调用(通过检查,如果选择了当前实例)或注册/取消注册事件选择。

另一种方法是将事件注册到像这样的代理对象(粗略代码):

class ClickEventProxy 
{
    private static ClickEventProxy selectedInstance; // <-- changend on selection

    public event EventHandler SomeEventToForward;
    public static void RaiseSomeEventToForward(object sender, EventArgs e)
    {
        if (selectedInstance.ClickedAddNewFrame != null)
            selectedInstance.ClickedAddNewFrame(sender, e);
    }
    ...
}

发件人网站看起来像SomeSource.Click += ClickEventProxy.RaiseSomeEventToForward;,所有收件人都会订阅他们的代理实例。

然而,处理实例(例如通过全局<object, proxy instance>字典)有点不方便,整个事情看起来有点笨拙。所以我的问题是:有更多的程序化方法吗?或者通过引入另一个步骤来代理事件本身是不好的做法,而应该删除并读取处理程序? (也许这可以通过使用自定义事件和更改调用列表来改善...)

0 个答案:

没有答案