#asp.net-core #dependency-injection #asp.net-core-webapi
#asp.net-core #внедрение зависимостей #asp.net-core-webapi
Вопрос:
Мне нужно создать класс service для моего конструктора, в котором мне нужно загрузить много конфигураций из моего appsettings.json. Я хочу, чтобы этот сервис создавался как одноэлементный, и мне нужно загружать значения конфигураций в сам сервис. Поэтому, пожалуйста, кто-нибудь, предложите мне лучший способ сделать это. Я создаю asp.net core webapi и использование его встроенного в контейнер core DI.
Ответ №1:
Конфигурация уже предварительно зарегистрирована хостом, который используется с ASP.NET Ядро. Таким образом, вы можете просто зарегистрировать свой сервис, как и любой другой одноэлементный сервис, и заставить его зависеть от конфигурации, потребовав IConfiguration
в конструкторе:
public class MyService
{
private readonly IConfiguration _config;
public MyService(IConfiguration config)
{
_config = config;
}
}
Затем вы можете зарегистрировать этот сервис как одноэлементный непосредственно в вашем ConfigureService
методе:
services.AddSingleton<MyService>();
Вещи, которые теперь зависят от вашего сервиса, например конструкторы, автоматически получат ссылку на этот экземпляр сервиса. И поскольку он зарегистрирован как одноэлементный, он будет создан контейнером DI только один раз.
Если вы хотите немного больше контролировать свою конфигурацию, я бы посоветовал вам адаптировать шаблон параметров, чтобы убедиться, что вы можете работать со строго типизированной конфигурацией и избегать попадания несвязанных значений конфигурации в службы, которые не должны иметь к ним доступа.