Los*_*ost 1 c# .net-core asp.net-core asp.net-core-2.0
这真让我惊讶。我正在使用Configuration.GetSection方法从appsettings.json读取值,并且简而言之,我的appsettings.json如下所示:
"AppSettings":
{
"PathPrefix": "",
"Something": "Something else",
"Clients":{"foo": "bar"}
}
Run Code Online (Sandbox Code Playgroud)
现在令我惊讶的是,如果我执行以下操作:
var foo = Configuration.GetSection("AppSettings:Clients:foo").Value;
Run Code Online (Sandbox Code Playgroud)
然后,它正确获取值。获得价值bar
但是,当我这样做
var clients = Configuration.GetSection("AppSettings:Clients").Value;
Run Code Online (Sandbox Code Playgroud)
它返回null。不仅是此字段,每当我调用getSection方法来获取任何复杂对象时,它都将返回null,但当我调用它以获取基本字符串值时,即使看似我仍然可以正确地获取该值,但在获取其父元素时遇到了问题。这让我感到困惑,并提出了三个问题:
您可以使用强类型对象加载整个对象。
首先,创建一个或多个类来保存您的设置。根据您的示例,它看起来像:
public class AppSettings
{
public string PathPrefix { get; set; }
public string Something { get; set; }
public Clients Clients { get; set; }
}
public class Clients
{
public string foo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,您需要将“选项”服务添加到服务集合中,并从配置中加载设置:
public void ConfigureServices(IServiceCollection services)
{
// This is only required for .NET Core 2.0
services.AddOptions();
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
services.AddMvc();
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以通过将属性注入到类中来访问属性,例如:
public class HomeController : Controller
{
private readonly AppSettings _settings;
public HomeController(IOptions<AppSettings> settings)
{
_settings = settings.Value;
}
}
Run Code Online (Sandbox Code Playgroud)
您还可以ConfigureService通过指定要加载的配置节来在方法中加载子选项。
services.Configure<Clients>(Configuration.GetSection("AppSettings:Clients");
Run Code Online (Sandbox Code Playgroud)
现在您可以注入IOptions<Clients>访问这些设置
官方文档可以在这里找到
| 归档时间: |
|
| 查看次数: |
679 次 |
| 最近记录: |