Как ввести строку подключения во внешний контроллер сборки (проекта)? - PullRequest
0 голосов
/ 01 июня 2018

Мой веб-API использует другой проект для одного контроллера.Сервис работает отлично.Но я пытаюсь внедрить строку подключения из основного проекта Web API в контроллер во внешнем проекте.

Как этого достичь?

public class MyExternalController : Controller
{
    private string _connStr;

    public MyExternalController(string connStr)
    {
        _connStr = connStr;
    }


    // actions here
}

1 Ответ

0 голосов
/ 01 июня 2018

Как говорили другие в комментариях, для чего-то вроде контроллера вы должны вводить что-то конкретное, например DbContext, а не строку подключения.Тем не менее, для дальнейшего использования ваша проблема здесь заключается в добавлении строки.Нет способа зарегистрировать что-либо в контейнере DI, чтобы удовлетворить такую ​​зависимость.Вместо этого вы должны внедрить свою конфигурацию или строго типизированный класс конфигурации.

Внедрение IConfigurationRoot является чем-то вроде анти-паттерна, но для чего-то вроде строки подключения, это хорошо:

public MyExternalController(IConfigurationRoot config)
{
    _connStr = config.GetConnectionString("MyConnectionString");
}

Однако для всего остального следует использовать строго типизированные классы конфигурации.

public class FooConfig
{
    public string Bar { get; set; }
}

Затем в ConfigureServices:

services.Configure<FooConfig>(Configuration.GetSection("Foo"));

Что, конечно, будет соответствоватьнемного конфигурации, например:

{
    "Foo": {
        "Bar": "Baz"
    }
}

Затем в вашем контроллере, например:

public MyExternalController(IOptionsSnapshot<FooConfig> fooConfig)
{
    _fooConfig = fooConfig.Value;
}
...