我们如何在新的asp.net vnext中存储配置数据?web.config仍然存在(system.web已删除,因此没有任何web.config,但我喜欢它)或使用新的json文件进行配置数据.
最佳配置是强类型选项的起点.因此,您在启动时要做的是注册一个Options对象,使用从配置中读取的数据进行设置,然后在其余代码中从DI系统获取.
例:
创建一个Options对象
public class ApplicationOptions
{
public bool MyOption { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
阅读配置并设置选项对象,然后在DI中注册
public void Configure(IApplicationBuilder app)
{
// rest of setup
var applicationOptions = new ApplicationOptions();
string myOption;
if (configuration.TryGet("MyOption", out myOption) &&
myOption.Equals("True", StringComparison.OrdinalIgnoreCase))
{
applicationOptions.MyOption = true;
}
// For the scenario above also the code below will work.
// It is currently limited to desktop (ASPNET50, NET45) only.
// services.Configure<ApplicationOptions>(configuration);
services.AddInstance<ApplicationOptions>(applicationOptions);
// more setup
}
Run Code Online (Sandbox Code Playgroud)
并在您的代码中解决它
public class MyController : Controller
{
public IActionResult Index(ApplicationOptions options)
{
// do something with the options
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:使用任何实用的可重用选项对象,设置它的代码可能会在启动类之外发生.
在重大变化(beta 6)中,Microsoft.Framework.ConfigurationModel程序集名称更改为Microsoft.Framework.Configuration 这是修改后的启动类
public IConfiguration Configuration { get; set; }
public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)
{
var configurationBuilder = new ConfigurationBuilder(appEnv.ApplicationBasePath).
.AddJsonFile("config.json")
.AddEnvironmentVariables();
Configuration = configurationBuilder.Build();
}
Run Code Online (Sandbox Code Playgroud)
不确定您要存储什么类型的数据,但这对我有用。我创建了此文件 myconfig.json 并以 JSON 格式存储我需要的数据。
这将注册您的配置文件,我在startup.cs页面中添加了此代码。
Configuration = new Configuration()
.AddJsonFile("config.json")
.AddJsonFile("myconfig.json")
.AddEnvironmentVariables();
Run Code Online (Sandbox Code Playgroud)
要从 JSON 文件中获取所需的数据,您需要在代码的任何位置获取此数据。
IConfiguration Configuration = new Configuration().AddJsonFile("myconfig.json");
var jsonNodes = Configuration.Get("SomeJsonNode");
string someJsonString = Configuration.Get("someJsonString");
Run Code Online (Sandbox Code Playgroud)
仅供参考:目前我测试不支持代码 json 数组。不确定他们现在是否解决了这个问题。
归档时间: |
|
查看次数: |
6288 次 |
最近记录: |