多个 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