【发布时间】:2021-07-29 04:27:42
【问题描述】:
在 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) {}
上面的这个显然行不通,那我如何在不必重构所有基类的情况下进行呢?
我能想到的唯一其他选择是实现某种工厂方法。
【问题讨论】:
-
所以您希望两个频道同时可用?你期望接收注入依赖的类如何选择正确的通道?
-
这就是问题所在。我不知道是否有办法做到这一点,而无需全力以赴。希望有类似“命名 HTTP 客户端”或其他解决方法的东西。
-
不,我不认为这是你的问题。您的问题是如何满足要求。我问你开始的要求是什么。为什么有两个渠道,您如何选择其中之一?例如。你有
if声明吗,比如if (user.Priority == Priority.High) channel = GetHighPriorityChannel()...? -
我有 1 个工作人员服务将监视两个通道的事件。如果该通道中有任何事件,它需要首先处理高优先级事件。或者继续处理 Normal 通道。上游数据进入通道的方式由上游服务决定,该服务将查看事件中的属性(所有者、客户端、描述)并自动决定将事件放置在哪个通道上。
标签: c# asp.net-core .net-core channels