0

我正在使用几个实现相同接口的不同提供程序,通过对象工厂实例化和访问它们。

我从这些附加到事件的不同提供者那里获取数据。这些提供者中的每一个都有自己的 CustomEventArgs,这在提供者之间有所不同......

您能否建议一种以“集中”方式管理事件(使用不同的 eventArgs)的方法?像投射事件之类的东西?以防万一我想对事件始终执行相同的行为,例如将字符串属性分配给 IU 上的标签。

  • 我是否可以实现类似中间类的东西来监听多个事件(使用不同的 eventArgs),然后 onEvent 可以使用 MyOwnEventArgs 引发一个新的 MyEvent,其中包含来自提供者的几个 CustomEventArgs 的所有特定属性的总和?这有优势吗?

  • 我可以实现类似中间类的东西来监听几个事件(使用不同的 eventArgs),然后 onEvent 可以引发一个新的 MyEvent,其中 MyOwnEventArgs 只包含一个 IDictionary 属性,其中每个 Item 包含所有特定属性的名称和值来自提供商的几个 CustomEventArgs?这有优势吗?

  • 有没有其他方法可以轻松地从几个 CustomEventArgs 中读取“不同”属性(不同的属性名称)?

4

1 回答 1

0

听起来很适合适配器模式将所有不同的事件类转换为您自己的事件类。

如果提供者正确地遵循事件模式,您将在source参数中获得提供者。

所以你可以做这样的事情:

interface IEventAdapter
{
    CustomEventArgs Transform(EventArgs E);
}

public class EventListener
{
    Dictionary<Type, IEventAdapter> _adapters;

    public void Map(Type providerType, IEventAdapter adapter)
    {
        _adapters.Add(providerType, adapter);
    }

    public void Subscribe(IProvider provider)
    {
        //hook event
    }

    protected void OnEvent(object source, EventArgs e)
    {
        var theArgs = _adapters[source.GetType()].Adapt(e);
        TheEvent(source, theArgs);
    }

    public EventHandler<CustomEventArgs> TheEvent;
}
于 2012-08-28T18:23:00.460 回答