Так же, как сервисы могут быть внедрены в контроллеры, так же как они могут быть внедрены в другие классы.
статические классы, однако, не подходят для внедрения зависимостей по умолчанию.
Вместо того, чтобы использовать статический класс, создайте обычный класс и явно зависите от желаемого сервиса посредством внедрения в конструктор
internal class MyClass : IMyService {
readonly AppSettings settings;
public MyClass(AppSettings settings) {
this.settings = settings;
}
internal void DosomeThing() {
// retrieve some value from settings
// continue with my logic
}
}
Затем вы можете зарегистрировать желаемое POCO и утилиты в контейнере службы
public void ConfigureServices(IServiceCollection services) {
AppSettings appSettings = Configuration.GetSection("AppSettings").Get<AppSettings>();
services.AddSingleton(appSettings);
services.AddSingleton<IMyService, MyClass>();
//. . . .
}
Внедрите свой сервис там, где это необходимо, и он будет иметь доступ к POCO, когда будет разрешен для инъекций.
На самом деле нет необходимости передавать IServiceProvider
, так как это может быть воспринято как запах кода.
Упрощение вашего проекта в соответствии с принципом явной зависимости должно сделать ваш код более НАДЕЖНЫМ, а также упростить отслеживание и поддержку.