gpt4 book ai didi

c# - 泛型协变转换或转换为实型

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

尝试构建 CQRS 解决方案时,我使用以下代码尝试查找 Handler 然后调用 Handle() 方法。

下面的代码可以工作,但是当我们知道所有 IHandleCommand<> 都有一个 Handle 方法时使用反射会很烦人,我相信这可以在编译时解决!

我必须以某种方式使用dynamic吗?

public void SendCommand(Command command)
{
Type handlerType = typeof(IHandleCommand<>).MakeGenericType(command.GetType());
object handler = container.Resolve(handlerType);
handler.GetType().GetMethod("Handle").Invoke(handler, new object[] { command });
}

这是上面使用的其他类型

public class Command {}

public class MyCommand : Command {}

public interface IHandleCommand<T>
{
void Handle(T command);
}

public class MyCommandHandler : IHandleCommand<MyCommand>
{
public void Handle(MyCommand command) {}
}

最佳答案

我做了一些类似于我使用容器(在我的例子中是 StructureMap)从中获取处理程序实例的东西。

查看该问题及其答案:StructureMap register generic types against all possible concrete implementations

关于c# - 泛型协变转换或转换为实型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10814768/

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