问题描述
在 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