为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
茅侃侃 2022-01-16 15:08:07
我无法理解在 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 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

全局变量和静态变量很糟糕。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 之类的东西的抱怨在大多数情况下是没有意义的。但是,如果您真的想要完全在内存中,则有一个内存配置提供程序。但是,如果可以,最好将配置外部化。


查看完整回答
反对 回复 2022-01-16
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

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


查看完整回答
反对 回复 2022-01-16
  • 2 回答
  • 0 关注
  • 346 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信