从接口方法获取委托

时间:2012-12-04 03:38:54

标签: c# interface delegates

我有一些代码基本上抓住了一个处理多个事件的事件处理程序,IHandles处理1个事件的每个句柄方法。

public interface IHandles { } 

public interface IHandles<T> : IHandles
{
    void Handle(T message);
}


public void SubscribeHandler(IHandles eventHandler)
{
    var genericHandler = typeof(IHandles<>);
    var supportedEventTypes = eventHandler.GetType()
            .GetInterfaces()
            .Where(iface => iface.IsGenericType && iface.GetGenericTypeDefinition() ==                   genericHandler)
            .Select(iface => iface.GetGenericArguments()[0])
            .ToList();
    // Register this handler for each of the handled types.
    foreach (var eventType in supportedEventTypes)
    {
        Subscribe(eventType.GetType(), 
                   Delegate.CreateDelegate(eventType, eventHandler, "Handle")
                  ); 
    }
}

现在第一位有效但我不确定Create Delegate部分是否有效以及它是否是最佳方式。是否可以创建一个Action?

最好让订阅商店IHandles代替Delgate,但很高兴能够只注册一次性操作,尤其是单元测试。

public IDisposable Subscribe(Type t, Delegate delegate1)
{
    var key = t;

    if (!actions.ContainsKey(key))
         actions.Add(key, new List<Delegate>());

    actions[key].Add(delegate1);

    return new DomainEventRegistrationRemover(delegate { actions[key].Remove(delegate1); });

}

1 个答案:

答案 0 :(得分:0)

无论如何,我将实现商店作为IDictionary,然后从Action创建一个IHandles ..

相关问题