ConfigurationModel和强类型配置

时间:2015-10-06 14:29:09

标签: c# asp.net-core

我喜欢新的ASP.NET 5配置库,所以我想在控制台应用程序中使用它。它适用于松散类型的配置。但我不知道如何使用强类型版本。

如何在这工作?我有两个班级

class Vehicle
{
    public string Description { get; set; }
    public int Mpg { get; set; }
    public Paint Paint { get; set; }
}

class Paint
{
    public string MajorColor { get; set; }
    public string MinorColor { get; set; }
}

配置文件:

<config>
  <vehicle>
    <description>Truck</description>
    <mpg>20</mpg>
    <paint>
      <majorcolor>white</majorcolor>
      <minorcolor>black</minorcolor>
    </paint>
  </vehicle>
</config>

我该如何使用?

var config = new Configuration();
config.AddXmlFile("../../StrongeConfig.xml");
?

首个非工作解决方案:

var path = Path.GetFullPath("..\\..\\config.json");
var build = new ConfigurationBuilder()
   .AddXmlFile(path);
var configuration = build.Build();
configuration.Bind(v);
Console.WriteLine(v.ToString());

给了我一辆空车。

1 个答案:

答案 0 :(得分:2)

以下是一个示例:https://github.com/aspnet/Configuration/blob/dev/test/Microsoft.Extensions.Configuration.Binder.Test/ConfigurationBinderTests.cs#L400-L401

构建配置构建器并将其用于绑定到强类型对象

更新:

class MyConfig
{
    public Vehicle Vehicle { get; set; }
}

class Vehicle
{
    public string Description { get; set; }
    public int Mpg { get; set; }
    public Paint Paint { get; set; }
}

class Paint
{
    public string MajorColor { get; set; }
    public string MinorColor { get; set; }
}

public class Program
{
    public void Main(string[] args)
    {
        var config = new ConfigurationBuilder();
        config.AddXmlFile(@"x.xml");
        var configuration = config.Build();

        //Approach 1 (top level object)
        var topConfig = new MyConfig();
        configuration.Bind(topConfig);
        Console.WriteLine(topConfig.Vehicle.Paint.MajorColor);

        //Approach 2 (scoped)
        var vehicleSection = configuration.GetSection("Vehicle");

        var vehicle = new Vehicle();
        vehicleSection.Bind(vehicle);
        Console.WriteLine(vehicle.Paint.MajorColor);
    }
}