如何解决多个 C# 通道,相同类型,不同名称
在 C# 中使用 Channels 时,我想运行具有相同基类型的多个通道,但这会导致 DI 出现问题。例如
我想要一个高优先级频道和一个中优先级频道,两者都是问题类型。所以为 DI 设置它看起来像
services.AddSingleton(channel.CreateUnbounded<Issue>()) // high priority
services.AddSingleton(channel.CreateUnbounded<Issue>()) // normal priority?
public async Task<bool> CreateHighPriorityIssues(Channel<Issue> channel) {}
public async Task<bool> CreatenormalPriorityIssues(Channel<Issue> channel) {}
上面的这显然行不通,那么我如何在不必重构所有基类的情况下进行呢?
我能想到的唯一其他选择是实现某种工厂方法。
解决方法
根据研究,使用 Microsoft 的内置 DI 框架并没有简单的方法可以做到这一点,尽管它易于使用,但功能并不像现有的某些 3rd 方 DI 框架那样丰富。
为此,我决定改用 Autofac,它为我提供了通过命名服务调用正确服务所需的灵活性。
https://autofac.readthedocs.io/en/latest/advanced/keyed-services.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。