#c_sharp #aspnet_core
Делаю небольшое веб-приложение для работы с лаками для ногтей. И нужно мне как-то визуально определять, работаю я в данный момент на продакшн версии сайта или на девелоперской, я обычно смотрю на внешний вид логотипа в шапке: на продакшене выглядит так А dev версия выглядит так: И сейчас это сделано через анализ адресной строки, в файле Views/Shared/_Layout.cshtml: @functions{ private bool IsDevEnv() { return Context.Request.Host.Value.Contains("localhost"); } } .... @if (IsDevEnv()) { Polish Hub } else { Polish Hub } Однако это не совсем то, что мне нужно: мне нужно проверять параметры sql server connection string, а не hostname сервера. (К сожалению, таковы особености appharbor'а по работе с core на текущий день - в классическом asp.net mvc нормально происходят замены переменных) Как можно добраться до этих настроек (connection string)в asp.net core? Можно ли как-то в view добраться до Configuration.GetConnectionString? Или, если нельзя, то с какого уровня определить переменную mode (prod/dev), чтобы пробрасывать её в layout страницы.
Ответы
Ответ 1
До настроек во View можно добраться через @inject Допустим у нас в appSettings.json написано такое { "SomeOption" : { "SomeProp" : 1000 } } Создадим класс MyAppOptions и в нем создадим свойство с названием совпадающим с названием опции public int SomeProp { get; set; } Теперь перейдем к Startup.cs в нем у нас уже должно быть поле private readonly IConfiguration _configuration; которому присваивается значение через конструктор. Далее переходим в метод ConfigureServices(...) и добавляем такое services.Configure(_configuration.GetSection("SomeOption")); Теперь во View @using Microsoft.Extensions.Options @inject IOptions options @в нужном месте@ @options.Value.SomeProp Ответ 2
Спасибо @Bullson за указание правильного ответа, сделал у себя так: В startup.cs: services.Configure(options => { options.SqlConnectionStringBuilder = new SqlConnectionStringBuilder(Configuration["ConnectionStrings:DefaultConnection"]); }); Сам класс настроек: public class MyAppOptions { public SqlConnectionStringBuilder SqlConnectionStringBuilder { get; set; } public bool IsDevEnv => this.SqlConnectionStringBuilder.IntegratedSecurity; } (Я воспользовался тем, что на dev окружение я захожу без пароля по логину windows) И во Views/Shared/_Layout.cshtml я делаю inject настроек: @using AuroraBorealis.PolishHub.WebApp.Data @using Microsoft.Extensions.Options @inject IOptions options .... @if (options.Value.IsDevEnv) { Polish Hub } else { Polish Hub } Ссылки по теме: Настройка приложения ASP.NET Core Передача конфигурации через IOptions Configuring properties from config.json using services.Configure Конфигурация ASP.NET Core приложения через IOptions
Комментариев нет:
Отправить комментарий