Как говорили другие в комментариях, для чего-то вроде контроллера вы должны вводить что-то конкретное, например 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;
}