0

同じインターフェイスを実装するいくつかの異なるプロバイダーを使用して、オブジェクト ファクトリを介してそれらをインスタンス化し、アクセスしています。

イベントに関連付けられているこれらのさまざまなプロバイダーからデータを取得します。これらのプロバイダーのそれぞれには、プロバイダー間で異なる独自の CustomEventArgs があります...

「一元化された」方法で (異なる eventArgs を使用して) イベントを管理するアプローチを提案できますか? イベントをキャストするようなものですか?文字列プロパティをIUのラベルに割り当てるなど、イベントで常に同じ動作をしたい場合に備えて。

  • 中間クラスのようなものを実装して (異なる eventArgs を使用して) いくつかのイベントをリッスンし、onEvent で、プロバイダーからのいくつかの CustomEventArgs のすべての特定のプロパティの合計を含む MyOwnEventArgs を使用して新しい MyEvent を発生させることができますか? これに利点はありますか?

  • いくつかのイベント (異なる eventArgs を使用) をリッスンする中間クラスのようなものを実装してから、onEvent が MyOwnEventArgs を使用して新しい MyEvent を発生させることができます。プロバイダーからのいくつかの 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 に答える