.NET CORE 配置

配置

提起“配置”,.NET开发人员立马会浮现出app.config和web.config两个文件,我们已经习惯将结构化的信息配置在这两个文件中。.NET CORE中的配置却有所不同,其提供了更加良好的扩展性,支持多样化的数据源。

说明

.NET CORE 配置主要涉及三个对象,它们分别是Configuration、ConfigurationBuilder和ConfigurationProvider,Configuration对象承载着在编程过程中使用的配置信息,ConfigurationProvider则是配置信息原始数据源的提供者,两者之间沟通由ConfigurationBuilder来完成,它利用ConfigurationProvider提取源数据将其转换为Configuration对象。例如,在建立的mvc项目中Startup函数中,可以看到以appsettings.json作为数据源提供者,构建来的Configuration作为配置信息的承载者。

    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
        .AddEnvironmentVariables();
    Configuration = builder.Build();

键值对读取

一般来说,Configuration 类只是一个提供了读写名/值对能力的 Providers 集合。通过ConfigurationProvider数据源提供者,配置生成对应的Configuration对应,可以获取名/值对。采用appsettings.json作为数据源,我们配置如下的数据。

{
  "version":"1.0.0",
  "data":{
    "name":"demo"
  }
}

对于存储在一个有层次的结构中,尤其是使用外部文件(如 JSON、XML、INI)时,可以使用以 : 符号分隔(从层次结构的根开始)的键来取回配置值。使用生成的Configuration读取version和name的值,如下所示

Configuration.GetSection("version").Value
Configuration.GetSection("data:name").Value

对象读取

如果我们将一个对象的属性视为它的子节点,这样对象同样具有类似于Configuration对象的树形层次化结构。如此一来,我们可以根据配置的结构来定义这个Option类型,那么Option类型的属性成员将与某个配置节具有一一对应的关系,从而将配置信息绑定为一个具体的Option对象。
ASP.NET Core针对配置的Option模型(OptionModel)帮助我们实现了从配置到Option对象之间的绑定,Option模型实现在Microsoft.Extensions.OptionsModel这个NuGet包。
我们创建一个简单的 MyOptions 类如下所示:

public class MyOptions
{
    public string Option1 { get; set; }
    public int Option2 { get; set; }
}

配置相应的文件如下:

{
  "version":"1.0.0",
  "data":{
    "name":"demo"
  }
  "MyOptions": {
    "Option1": "DEMO",
    "Option2": 1
  }
}

当你通过绑定选项来配置选项类型的每一个属性,实际上是绑定到每一个配置键(比如 property:subproperty:...)。比方说,MyOptions.Option1 属性绑定到键 Option1,那么就会从 appsettings.json 中读取 option1 属性。注意,配置键是大小写不敏感的。

public void ConfigureServices(IServiceCollection services)
{
    // Setup options with DI
    services.AddOptions();                   

    services.Configure<MyOptions>(Configuration.GetSection("MyOptions"));

    // Add framework services.
    services.AddMvc();
}

通过调用 Configure 将一个 IConfigureOptions 服务加入服务容器,是为了之后应用程序或框架能通过 IOptions 服务来获取配置选项。若是想从其他途径(比如之前从数据库)获取配置,你可使用 ConfigureOptions 扩展方法直接指定经过定制的 IConfigureOptions 服务。

通过 IOptions ,配置选项将被注入到应用程序中。比方说,如 controller 使用 IOptions 来访问需要在 Index 视图中渲染的配置:

public class HomeController : Controller
{
    private IOptions<MyOptions> _options; 
    public HomeController(IOptions<MyOptions> options) 
    {
        this._option = options;
    }                                                      
}
posted @ 2017-07-10 21:30  S&L·chuck  阅读(1268)  评论(0编辑  收藏  举报