gpt4 book ai didi

c# - Microsoft 依赖注入(inject)和逆变

转载 作者:行者123 更新时间:2023-12-05 07:25:19 25 4
gpt4 key购买 nike

我正在将一个库移植到 net core。我们现在有了内置的 DI,我想尽可能地使用它。

我的库将事件从后端代理到信号器客户端,它包含一个框架来在将事件发送到特定客户端之前验证事件。我的旧库支持逆变,因此如果需要,一个事件处理程序可以支持所有事件。考虑一下

public class ContravariantHandler : IEventHandler<BaseEvent>
{
public void Handle(BaseEvent message)
{

}
}

public abstract class BaseEvent { }

public class MyEvent : BaseEvent { }
public class MyEvent2 : BaseEvent { }

public interface IEventHandler<in T>
{
void Handle(T message);
}

执行 new ContravariantHandler().Handle(new MyEvent());new ContravariantHandler().Handle(new MyEvent2()); 在这里都很好。

我能否让要处理的网络核心 DI 成为此处的正确类型?

这行不通,

var provider = new ServiceCollection()
.AddTransient<IEventHandler<BaseEvent>, ContravariantHandler>()
.BuildServiceProvider();

var contravariance = provider.GetService<IEventHandler<MyEvent>>();

最佳答案

Can I get the net core DI to handle be the correct type here?

没有任何内置机制,也不太可能添加。

We understand the scenario but adding support for this would make it difficult to work with other containers.https://github.com/aspnet/DependencyInjection/issues/453

但是您可以引入另一个接口(interface),即 IEventHandler , 解析 IEnumerable<IEventHandler>并检查每一个的兼容性。缺点是这会导致激活所有事件处理程序。

关于c# - Microsoft 依赖注入(inject)和逆变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54922190/

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