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

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как автоматически регистрировать средние общие обработчики без ручного определения каждого типа?

Сообщение Anonymous »

Я работаю с mediatr и инъекцией зависимостей в asp.net core , и я пытаюсь найти лучший способ зарегистрировать общие обработчики без вручную, указав все бетон Типы (например, string , bool , decimal и т. Д.) В IserviceCollection .
В настоящее время мой метод добавления сервисов MediaTr выглядит так: < /p>

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

public static void MediatRServices(this IServiceCollection service)
{
service.AddMediatR(c => c.RegisterServicesFromAssembly(typeof(LoginCommand).Assembly));

service.AddTransient(typeof(IPipelineBehavior), typeof(LoggingBehavior));

// Manually adding handlers for different concrete types
service.AddTransient(typeof(IRequestHandler),
typeof(UpdateServiceHandler));
service.AddTransient(typeof(IRequestHandler),
typeof(UpdateServiceHandler));
service.AddTransient(typeof(IRequestHandler),
typeof(UpdateServiceHandler));
service.AddTransient(typeof(IRequestHandler),
typeof(UpdateServiceHandler));

// Other handlers for different commands...
service.AddTransient(typeof(IRequestHandler),
typeof(UpdateGenericPropertyHandler));
service.AddTransient(typeof(IRequestHandler),
typeof(UpdateGenericPropertyHandler));
service.AddTransient(typeof(IRequestHandler),
typeof(UpdateGenericPropertyHandler));
}
Задача:
Как показано выше, для каждого общего обработчика мне нужно вручную указать все необходимые типы (например, строка , bool , десятичный и т. Д.). Этот подход не очень хорошо масштабируется, особенно когда количество комбинаций увеличивается. -Верд ">

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

services.AddTransient(typeof(IRequestHandler),
typeof(UpdateGenericPropertyHandler));
Но это вызывает ошибки времени выполнения, потому что iServiceCollection в asp.net core di не поддерживает открытые общие регистрации без дополнительной конфигурации. В результате он не в состоянии динамически разрешать обработчики для определенных типов. Чтобы настроить эти регистрации в одном месте без явного определения каждого типа комбинации вручную?

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

IRequestHandler
) разрешаются во время выполнения?

Я ищу решение, которое легко работает с mediatr при сокращении повторяющихся ручных регистраций. Любые советы или примеры будут очень оценены! Вот какой-то контекст о командах/обработчиках, которые я использую:
Пример команды/обработчика:

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

public class UpdateServicePropertyCommand : IRequest
{
public T Value { get; set; }
}

public class UpdateServiceHandler : IRequestHandler
{
public Task Handle(UpdateServicePropertyCommand request, CancellationToken cancellationToken)
{
// Implementation
}
}
< /code>
и аналогично другим командам /обработчикам. < /p>
 Дополнительные примечания: < /h3>

 Мне известно о библиотеках, таких как Scrutor 
для сканирования сборки, но мне не удалось настроить регистрацию динамического общего типа для этого случая. Способ справиться с этим делом, я с радостью мигрирует на него. Чтобы упростить этот процесс с помощью следующей конфигурации AddMediatr , включив RegisterGenerichandlers :

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

service.AddMediatR(c =>
{
c.RegisterServicesFromAssembly(typeof(LoginCommand).Assembly);
c.MaxTypesClosing = 0; // Set to allow registering all types
c.RegisterGenericHandlers = true;
});
< /code>
Но это привело к следующей ошибке: < /p>
System.ArgumentException: Error registering the generic type: . The total number of generic type registrations exceeds the maximum allowed (125000).
Похоже, что этот подход пытается генерировать или зарегистрировать больше типов, чем необходимо, и бросает этот аргумент Exception .


Подробнее здесь: https://stackoverflow.com/questions/794 ... y-defining
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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