Я хочу зарегистрировать некоторые универсальные интерфейсы, которые могут быть преобразованы в соответствующий реализованный класс.Я использую встроенное в Dependency Injection ядро asp.net ( ServiceProvider ).
Предположим, что мой интерфейс выглядит следующим образом:
public interface ICommandHandler<in TCommand> where TCommand :Command
{
void Execute(TCommand command);
}
, и мой класс такой:
public class AddItem1CommandHandler : ICommandHandler<AddItem1Command>
public class AddItem2CommandHandler : ICommandHandler<AddItem2Command>
и мои команды, как это явно в ограничении интерфейса, похожиthis:
public class AddItem1Command: Command
public class AddItem2Command: Command
Итак, я могу зарегистрировать их один за другим:
services.AddTransient<ICommandHandler<AddItem1Command>, AddItem1CommandHandler>();
services.AddTransient<ICommandHandler<AddItem2Command>, AddItem2CommandHandler>();
Проблема в том, что я вынужден определить регистрацию для каждой реализации.Теперь мой вопрос заключается в том, есть ли способ зарегистрировать все из них в одну строку, например:
services.AddScoped<ICommandHandler<Command>, Command>();
Я не знаю, как это возможно или нет с помощью ServiceCollection.