gpt4 book ai didi

c# - 从接口(interface)方法获取委托(delegate)

转载 作者:太空宇宙 更新时间:2023-11-03 16:21:45 24 4
gpt4 key购买 nike

我有一些代码基本上获取了一个事件处理程序,该处理程序处理多个事件,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")
);
}
}

现在第一部分有效,但我不确定创建委托(delegate)部分是否有效以及它是否是最佳方法。是否可以创建一个 Action ?

让 Subscribe 存储 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); });

}

最佳答案

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

关于c# - 从接口(interface)方法获取委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13695697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com