C# Как создать коллекцию в IServiceCollection за пределами библиотеки?

Я добавляю общий список через конструктор. Пользователи моей библиотеки должны иметь возможность добавлять свои собственные реализации. Все реализации известны во время компиляции. В настоящее время я добавляю что-то вроде следующего (я понимаю, что есть и другие способы сделать это):

      ServiceCollection.AddSingleton<List<ICommand>>>(new List<ICommand>()
{
   new Command1(),
   new Command2(),
   new etc....
});

Это хорошо подходит для добавления реализаций, определенных в текущей библиотеке. Однако я хочу, чтобы другие использовали мою библиотеку и добавили свои собственные реализации. Как они добавляют свои ICommand к этому List<ICommand> извне этой библиотеки?

Я использую этот конкретный пример с List<T>чтобы понять более общую проблему: «Как вы строите объект ЧЕРЕЗ библиотеки границ с помощью ServiceCollection"?

1 ответ

Вы можете зарегистрировать один и тот же тип более одного раза с помощью IServiceCollectionи автоматически разрешит их все в IEnumerable<>.

Например, если вы хотите, чтобы пользователи вашей библиотеки добавляли собственный ICommand объекты, которые они просто сделали бы в своей собственной библиотеке:

      serviceCollection.AddSingleton<ICommand, CustomCommand1>();
serviceCollection.AddSingleton<ICommand, CustomCommand2>();
serviceCollection.AddSingleton<ICommand, CustomCommand3>();

В ServiceProvider автоматически добавит их в список IEnumerable<ICommand> где требуется (за пределами библиотеки).

Другие вопросы по тегам