Как использовать .Внедрение зависимостей NET Core для разрешения объекта, для которого требуется объект для его конструктора?

#dependency-injection #.net-core

#внедрение зависимостей #.net-core

Вопрос:

В моем приложении у меня есть сервис, который принимает некоторые настройки в своем конструкторе

 public class Service
{
    private readonly Settings _settings

    public Service(Settings settings)
    {
        _settings = settings;
    }
}

public class Settings
{
   // omitted for brevity
}
 

При настройке DI Startup.cs я добавляю службу:

 services.AddTransient<Service>();
 

Я не знаю, как настроить контейнер DI для использования Settings объекта. Как я могу это сделать?

Я прочитал официальную документацию, но я не вижу, как это сделать

Ответ №1:

Внедрение зависимостей в .NET работает через интерфейсы. В вашем случае вам нужно будет создать интерфейс, что-то вроде

 public interface ISettings
{
    // necessary methods
}
 

и заставьте ваш Settings класс реализовать этот интерфейс. Затем вам нужно будет изменить свой Service класс и заменить class интерфейсом:

 public class Service
{
    private readonly ISettings _settings

    public Service(ISettings settings)
    {
        _settings = settings;
    }
}
 

и, наконец, зарегистрируйте свой класс Settings в Startup.cs :

 services.AddTransient<ISettings, Settings>();