我正在尝试将 settings.json 文件手动添加到 .net core 2.1 控制台应用程序。因此,我将这些 NuGet 包添加到项目中:
Microsoft.扩展.配置
Microsoft.Extensions.Configuration.FileExtensions
Microsoft.Extensions.Configuration.Json
appsettings.json并像这样创建文件:
{
"Section1": {
"Prop1": "value",
"Prop2": 300
}
}
Run Code Online (Sandbox Code Playgroud)
最后,我尝试从设置文件中获取值,如下所示:
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
_configuration = builder.Build();
var section = _configuration.GetSection("Section1");//section.Value is null
var test = _configuration.GetSection("Section1:Prop1");//it returns the proper value
var model = section as Section1Model;
Run Code Online (Sandbox Code Playgroud)
但是,section.Value是null,因此,model是null。如果我尝试获取类似的值,_configuration.GetSection("Section1:Prop1")它会返回正确的值。另外,如果我打电话_configuration.GetSection("Section1).GetChildren()它,它会返回一组设置。我做错了什么?
PS:我保证将设置文件复制到bin文件夹中
ConfigurationBuilder只返回通用IConfiguration实例。如果您想要一个强类型模型,则必须首先对其进行绑定。有几种方法可以做到这一点 - Microsoft 自己的实现位于Microsoft.Extensions.Configuration.Binder. ConfigurationBinder然后,您可以通过以下扩展方法以多种方式访问静态类IConfiguration:
var model = _configuration.GetSection("Section1").Get<Section1Model>();
Run Code Online (Sandbox Code Playgroud)
奇怪的是,没有扩展方法可以直接将节放入对象中,但编写一个很容易。
如果您使用依赖注入(Microsoft.Extensions.DependencyInjection,Microsoft.Extensions.Options.ConfigurationExtensions),则会有一个.Configure<Section1Model>()扩展方法来注册此绑定。
| 归档时间: |
|
| 查看次数: |
1629 次 |
| 最近记录: |