ASP.Net Core 2 中的全局变量
Posted
技术标签:
【中文标题】ASP.Net Core 2 中的全局变量【英文标题】:Global Variables in ASP.Net Core 2 【发布时间】:2019-03-10 07:02:54 【问题描述】:我正在用 ASP.NET Core 开发一个 Web 应用程序,目前有大量的密钥,例如条带帐户密钥。我不想让它们以不同的类分布在整个项目中,我想将它们全部放在 json 中,以便全局访问它们。我尝试将它们放在 appsettings.json 中,但无法在任何地方访问它们。
【问题讨论】:
将它们放在 appsettings 中是处理这类事情的好地方(记得将该文件添加到您的 gitignore 中!)要在控制器中访问它们,您需要使用 DI。 尝试放入 appsettings.json,然后创建一个类来帮助存储这些值 【参考方案1】:我经常用连接字符串和其他全局常量做这种事情。首先为您需要的那些变量创建一个类。在我的项目中,它是 MDUOptions
,但无论你想要什么。
public class MDUOptions
public string mduConnectionString get; set;
public string secondaryConnectionString get; set;
现在在您的 Startup.cs ConfigureServices 方法中:
Action<MDU.MDUOptions> mduOptions = (opt =>
opt.mduConnectionString = Configuration["ConnectionStrings:mduConnection"];
);
services.Configure(mduOptions);
services.AddSingleton(resolver => resolver.GetRequiredService<IOptions<MDUOptions>>().Value);
现在你使用 DI 在代码中访问它:
public class PropertySalesRepository : IPropertySalesRepository
private static string _mduDb;
public PropertySalesRepository(MDUOptions options)
_mduDb = options.mduConnectionString;
....
就我而言,我想要的唯一属性是字符串,但我可以使用整个选项类。
【讨论】:
谢谢@nurdyguy,这个答案很清楚!就一个跟进,如何获取你在 PropertySalesRepository 构造函数中使用的 MDUOptions 参数? 框架内置的依赖注入将填充options
变量。 services.AddSingleton(...)
行对此至关重要。
这里是关于依赖注入的更多信息,它很神奇! docs.microsoft.com/en-us/aspnet/core/fundamentals/…
@nurdyguy 为什么不创建一个静态类呢?
@OffirPe'er 你的意思是一个带有一堆硬编码字符串值的静态类吗?当您对不同的环境(dev vs qa vs prod)有不同的值时会发生什么?使用 IOptions
是做这种事情的最佳方式,尽管在过去 2 年中实现发生了一些变化:docs.microsoft.com/en-us/dotnet/api/…【参考方案2】:
在 appsettings.json 中保留变量。
"foo": "value1",
"bar": "value2",
创建 AppSettings 类。
public class AppSettings
public string foo get; set;
public string bar get; set;
在Startup.cs文件中注册。
public IServiceProvider ConfigureServices(IServiceCollection services)
services.Configure<AppSettings>(Configuration);
用法,
public class MyController : Controller
private readonly IOptions<AppSettings> _appSettings;
public MyController(IOptions<AppSettings> appSettings)
_appSettings = appSettings;
var fooValue = _appSettings.Value.foo;
var barValue = _appSettings.Value.bar;
【讨论】:
以上是关于ASP.Net Core 2 中的全局变量的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core 中的Ajax全局Antiforgery Token配置