我正在使用几个不同的提供程序来实现相同的接口,通过对象工厂实例化和访问它们。
我从附加到事件的这些不同提供者处获取数据。这些提供者中的每一个都有自己的CustomEventArgs,它们在提供者之间有所不同......
您能否建议采用“集中”方式管理事件(使用不同的eventArgs)?像铸造事件的东西?以防我想在事件上始终执行相同的操作,例如将字符串属性分配给IU上的Label。
我可以实现类似中间类的东西来监听几个事件(使用不同的eventArgs),然后onEvent可以使用MyOwnEventArgs引发一个新的MyEvent,其中包含来自的几个CustomEventArgs的所有特定属性的总和供应商?对此有什么好处吗?
我可以实现类似中间类的东西来监听几个事件(使用不同的eventArgs)然后onEvent可以使用MyOwnEventArgs引发一个新的MyEvent,它只包含一个IDictionary属性,其中每个Item包含名称和值来自提供商的几个CustomEventArgs的所有特定属性?对此有什么好处吗?
有没有其他方法可以轻松地从多个CustomEventArgs中读取“不同”属性(不同的属性名称)?
答案 0 :(得分: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;
}