Установите динамические переменные в Startup.cs в ASP.NET CORE - PullRequest
0 голосов
/ 13 сентября 2018

У меня проблемы с пониманием лучшего способа установки динамических переменных в Startup.cs. Я хочу быть в состоянии получить это значение в контроллере или в представлении. Я хочу иметь возможность хранить значения в памяти, а не файл JSON. Я смотрел на установку значений в переменных сеанса, но это не похоже на хорошую практику или работу. Как лучше устанавливать динамические переменные в Startup.cs?

public class Startup
    {
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();

        //services.AddDbContext<>(options => options.UseSqlServer(Configuration.GetConnectionString("Collections_StatsEntities")));
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseBrowserLink();
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }

        app.UseStaticFiles();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }
}

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Глобалы и статики плохие. ASP.NET Core включает встроенный DI специально, чтобы избежать этого, так что не ходите и не вводите их заново. Правильный подход заключается в использовании конфигурации. Стандартно приложение ASP.NET Core поддерживает настройку через JSON (appsettings.json и appsettings.{environment}.json), командную строку, пользовательские секреты (также JSON, но хранящиеся в вашем профиле, а не в проекте) и среду. переменные. Если вам нужны другие источники конфигурации, есть другие доступные провайдеры, или вы можете даже свернуть свой собственный, чтобы использовать все, что вам нравится.

Какой бы источник конфигурации вы ни использовали, конечным результатом будут все параметры конфигурации из всех источников, входящих в IConfigurationRoot. Хотя вы можете технически использовать это напрямую, лучше использовать строго типизированную конфигурацию, предоставляемую IOptions<T> и аналогичными. Просто вы создаете класс, который представляет некоторый раздел в вашей конфигурации:

public class FooConfig
{
    public string Bar { get; set; }
}

Что будет соответствовать чему-то вроде { Foo: { Bar: "Baz" } } в JSON, например. Затем в ConfigureServices в Startup.cs:

services.Configure<FooConfig>(Configuration.GetSection("Foo"));

Наконец, в вашем контроллере, например:

 public class FooController : Controller
 {
     private IOptions<FooConfig> _config;

     public FooController(IOptions<FooConfig> config)
     {
         _config = config ?? throw new ArgumentNullException(nameof(config));
     }

     ...
 }

Конфигурация читается при запуске и впоследствии технически сохраняется в памяти, поэтому ваша жалоба на необходимость использовать что-то вроде JSON по большей части не имеет смысла. Однако, если вы действительно хотите полностью в памяти, есть поставщик конфигурации памяти . Тем не менее, всегда лучше, если вы можете экстернализировать вашу конфигурацию.

0 голосов
/ 14 сентября 2018

Ну, дважды щелкните ваши settings.settings в ваших свойствах, прежде чем скомпилировать код.вы можете присвоить переменной имя, тип, область действия (пользователь означает, что она может быть изменена для каждой установки, приложение означает, что она останется такой же, как и при исходном значении и не может быть изменена), и, наконец, значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...