Страницы

Поиск по вопросам

воскресенье, 15 декабря 2019 г.

Определение настроек prod/dev по connection string

#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

Комментариев нет:

Отправить комментарий