首页 > 解决方案 > 多个 C# 通道,相同类型,不同名称

问题描述

在 C# 中使用通道时,我想运行具有相同基本类型的多个通道,但这会导致 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) {}

这显然是行不通的,那么我该如何在不必重构所有基类的情况下进行呢?

我能想到的唯一其他选择是实现某种工厂方法。

标签: c#asp.net-core.net-corechannels

解决方案


根据研究,使用 Microsoft 的内置 DI 框架并没有简单的方法来做到这一点,尽管它易于使用,但功能并不像某些第 3 方 DI 框架那样丰富。

为此,我决定改用 Autofac,这为我提供了通过命名服务调用正确服务所需的灵活性。

https://autofac.readthedocs.io/en/latest/advanced/keyed-services.html


推荐阅读