在 ASP.NET CORE 的 Startup.cs 中设置动态变量

我无法理解在 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?}");

        });

    }

}


茅侃侃
浏览 347回答 2
2回答

皈依舞

全局变量和静态变量很糟糕。ASP.NET Core 包含专门为避免这些而内置的 DI,因此不要重新引入它们。正确的做法是使用配置。开箱即用的 ASP.NET Core 应用程序支持通过 JSON(appsettings.json和appsettings.{environment}.json)、命令行、用户机密(也是 JSON,但存储在您的配置文件中,而不是在项目中)和环境变量进行配置。如果您需要其他配置来源,可以使用其他现有的提供程序,或者您甚至可以自己动手使用任何您喜欢的方式。无论您使用哪个配置源,最终结果都将是来自所有源的所有配置设置进入IConfigurationRoot. 虽然您可以在技术上直接使用它,但最好使用由提供的强类型配置IOptions<T>和类似配置。简单地说,您创建一个代表配置中某个部分的类:public class FooConfig{&nbsp; &nbsp; public string Bar { get; set; }}例如,这将对应{ Foo: { Bar: "Baz" } }于 JSON 中的内容。然后,在ConfigureServices中Startup.cs:services.Configure<FooConfig>(Configuration.GetSection("Foo"));最后,在您的控制器中,例如:&nbsp;public class FooController : Controller&nbsp;{&nbsp; &nbsp; &nbsp;private IOptions<FooConfig> _config;&nbsp; &nbsp; &nbsp;public FooController(IOptions<FooConfig> config)&nbsp; &nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_config = config ?? throw new ArgumentNullException(nameof(config));&nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp;...&nbsp;}配置是在启动时读取的,然后技术上存在于内存中,因此您对必须使用 JSON 之类的东西的抱怨在大多数情况下是没有意义的。但是,如果您真的想要完全在内存中,则有一个内存配置提供程序。但是,如果可以,最好将配置外部化。

呼啦一阵风

好吧,在编译代码之前,双击属性中的 settings.settings。你可以给变量一个名字,一个类型,一个范围(用户是意味着它可以在每次安装时更改,应用程序意味着它将保持原来的值并且不能更改),最后是值。
打开App,查看更多内容
随时随地看视频慕课网APP