У меня есть новый проект ASP.NET Core 8 MVC, использующий Visual Studio 2022.
В appsettings.json
у меня есть строка подключения:
"ConnectionStrings": {
"MyDB": "...connecting...details...."
}
Я могу использовать внедрение зависимостей в своих контроллерах, чтобы прочитать это значение:
private IConfiguration _AppSettingsConfig;
public PocController(IConfiguration config)
{
_AppSettingsConfig = config;
}
а затем использовать его
_AppSettingsConfig.GetConnectionString("MyDB")
или
_AppSettingsConfig["ConnectionStrings:MyDB"];
Это работает, однако я хочу заменить эти 5 строк классом, содержащим статическое свойство, которое будет оборачивать это и возвращать значение appsettings.json
.
public class ConfigProps
{
public static string MyDBConString
{
get
{
return "how do I get from here to the config?";
}
}
}
Есть ли способ сделать это?
Вы все равно можете получить его, используя ConfigurationBuilder для загрузки файла json, а затем прочитать его с помощью метода GetConnectionString.
Более подробную информацию вы можете просмотреть ниже, коды:
public class ConfigProps
{
private static readonly IConfiguration _config;
static ConfigProps()
{
_config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
}
public static string MyDBConString
{
get
{
return _config.GetConnectionString("DefaultConnection");
}
}
}
Результат:
Будут ли при этом использоваться кешированные данные из файла appsettings.json или они будут считаны из нового?
Кэшированные данные по умолчанию, если вы хотите перезагрузить файл appsetting.json, и вы можете установить для него reloadOnChange: true.
reloadOnChange не сработал, но основной ответ, который вы предоставили, работает как шарм. Он сохраняет значения такими, какие они есть, до следующей перестройки. Я не проверял, что происходит, когда есть значения, которые переопределяют настройки для каждой среды. Спасибо!
Почему вы хотите это сделать?