Как использовать инъекцию зависимостей .NET Core для разрешения объекта, который требует объекта в своем конструкторе? - PullRequest
1 голос
/ 14 апреля 2019

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

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 Ответ

2 голосов
/ 14 апреля 2019

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

public interface ISettings
{
    // necessary methods
}

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

public class Service
{
    private readonly ISettings _settings

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

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

services.AddTransient<ISettings, Settings>();
...