У вас есть доступ к поставщику услуг в рамках фабричного делегата.
Разрешите другие зависимости и введите статическую переменную при инициализации службы.
//...
var connectionString = cfg["myConnectionString"];
services.AddSingleton<IMyService>(_ =>
new MyService(_.GetService<IService1>(), _.GetService<IService2>(), connectionString));
В приведенном выше примере _
в фабричном делегате представляет собой IServiceProvider
, а GetService<T>
метод расширения используется для разрешения других служб при условии, что они также зарегистрированы в коллекции служб.
Фабричный делегат будет вызван при первом запросе IMyService
.
В качестве альтернативы, ссылка Шаблон параметров в ASP.NET Core
И, например, settings.json file
{
"myConnectionString": "value1_from_json",
}
рассмотрите возможность использования IOptions<T>
, предоставляемого расширением конфигурации.
создать класс для хранения желаемой конфигурации.
public class MyConnections {
public string MyConnectionString { get; set; }
}
рефакторинг класса зависит от IOption<MyConnections>
public class MyService : IMyService {
private string connectionString;
public MyService(IService1 service1, IService2 service2, IOptions<MyConnections> options){
connectionString = options.Value.MyConnectionString;
//...
}
//...
}
и настройте его при запуске
//...
services.Configure<MyConnections>(Configuration);
services.AddSingleton<IMyService, MyService>();