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>
где требуется (за пределами библиотеки).