Простое именование переменной среды определенным образом не означает, что MVC подберет их. Возможно, вы предполагаете, что происходит немного больше магии c, чем на самом деле.
Когда вы делаете ConfigurationManager.ConnectionStrings["MyConnectionStringName"].ConnectionString
, вы извлекаете только строку подключения из файла web.config или machine.config, если Вы случайно определили это там. Нет ничего, что могло бы сказать вашему приложению, чтобы оно захватывало его откуда-либо еще.
Вместо этого вы можете рассмотреть возможность создания класса для представления вашей конфигурации:
public class MyApplicationDatabaseConfiguration
{
public string ConnectionString { get; set; }
}
Любой класс, которому необходимо получить это соединение Строка может сделать это, в зависимости от экземпляра этой MyApplicationDatabaseConfiguration.
public class MyDatabaseRepository
{
readonly MyApplicationDatabaseConfiguration _dbConfig;
public MyDatabaseRepository(MyApplicationDatabaseConfiguration dbConfig)
{
_dbConfig = dbConfig;
}
public void DoSomethingWithTheDatabase()
{
using(var connection = new SqlConnection(_dbConfig.Connectionstring))
{
//now you can use the connection
}
}
}
Затем вы можете загрузить свою конфигурацию так, как вам нравится. Пример:
MyApplicationDatabaseConfiguration dbConfig = new MyApplicationDatabaseConfiguration();
dbConfig.ConnectionString = Environment.GetEnvironmentVariable("MyApplication_MyConnectionString");
Теперь MyDatabaseRepository не имеет значения как вы загружаете конфигурацию базы данных, она просто говорит: «Мне нужна конфигурация базы данных». Это очень мощный инструмент, он позволяет вам изменить конфигурацию, просто изменив строку кода. Нужно вернуться к использованию web.config? Это так же просто, как dbConfig.ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionStringName"].ConnectionString;
Microsoft сделала еще один шаг вперед в библиотеке Microsoft.Extensions.Configuration, которая предназначена для. NET Ядро, но нацелено на. NET Стандарт, поэтому Вы можете использовать его в своей библиотеке NET Framework, если хотите .