Я пишу свой собственный метод расширения для ServiceCollection
для регистрации типов моего модуля, и мне нужно получить доступ к экземпляру IConfiguration
из коллекции, чтобы зарегистрировать мои параметры.
Метод расширения
public static IServiceCollection AddApi(this IServiceCollection services)
{
// Get configuration from collection
var configuration = (IConfiguration) services.FirstOrDefault(p => p.ServiceType == typeof(IConfiguration)).ImplementationInstance;
services.Configure<DatabaseOptions>(configuration.GetSection("Database"));
}
Это правильный способ получить экземпляр IConfiguration
из коллекции или есть более элегантное решение? Я не хочу добавлять экземпляр IConfiguration в качестве параметра метода.
IConfiguration
из любого места, кроме корня композиции (классStartup
для ядра ASP.NET), поскольку это подразумевает, что файл конфигурации должен иметь определенную структуру, которую вообще нельзя изменить. Вместо этого я бы написал метод расширения для настройки классов конфигурации внутри корня композиции и передачи объектаIConfiguration
, аналогично тому, как.Configure<MyLibConfig>(Configuration.GetSection("MyLibConfig")
. Таким образом, разработчик, составляющий свое приложение из ваших компонентов, может решить, где разместить его в файле appsettings.json. - person Tseng   schedule 18.08.2017IConfiguration
и имеют один и тот же раздел в конфигурации? то естьJsonSettings
, но имеют совершенно другую структуру? Это можно решить, только позволив разработчику, составившему его, выбрать и передать имя раздела вашему методу расширения, который устанавливает параметры через.Configure<T>
- person Tseng   schedule 18.08.2017ImplementationInstance
было нулевым. Пришлось звонить.ImplementationFactory(null)
. Работает, но грязновато конечно. - person PhillipM   schedule 15.12.2020