Как зарегистрировать делегат функции с интерфейсом общего типа?C#

Место общения программистов C#
Ответить
Anonymous
 Как зарегистрировать делегат функции с интерфейсом общего типа?

Сообщение Anonymous »

Извините, если вопрос сформулирован как у начинающего программиста (это потому, что я еще новичок). Я хотел создать гибкий MessageProcessor, в зависимости от Поставщика(= enum) и в зависимости от того, какой MessageProcessor будет использоваться другой объект Message.
Текущая ситуация выглядит следующим образом:

Код: Выделить всё

public interface IMessageProcessor
{
Task ProcessMessageAsync(TMessage message, string tableConfig);
}

public class MessageProcessorA : IMessageProcessor
{
public Task ProcessMessageAsync(MessageA message, string tableConfig)
}

public class MessageProcessorB : IMessageProcessor
{
public Task ProcessMessageAsync(MessageB message, string tableConfig)
}
Тогда в Program.cs я мог бы сделать что-то вроде этого:

Код: Выделить всё

builder.Services
// Register all message processors
.AddSingleton(serviceProvider => supplierType =>
{
return supplierType switch
{
SupplierType.A => serviceProvider.GetRequiredService(),
SupplierType.B => serviceProvider.GetRequiredService(),
_ => throw new NotImplementedException(),
};
})
Потому что, очевидно, это способ переключения между различными Службами без необходимости переключения случая в логическом коде с помощью IFactory и всего, что с ним связано. Что мне заполнить в IMessageProcessor, чтобы сделать его целостным? Возможно, это плохой дизайн, или, может быть, есть простое решение, но это впервые.
РЕДАКТИРОВАТЬ: я никогда не реализовал концепцию блока DataFlow, я попробую реализовать ее и посмотрю, смогу ли я в этом разобраться. Выглядит интересно 🤓👍

Подробнее здесь: https://stackoverflow.com/questions/798 ... neric-type
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»