如何正确地将appsettings.json中的配置对象绑定到用户对象

时间:2017-03-19 17:43:04

标签: c# asp.net-core

我在.net Core 1.1上开始了一些基础项目, 我希望将appsettings.json中的一些属性映射到object,但我可能无法理解正确的名称约定或非常基本的东西

Regarding MSDN使用选项和配置对象部分, 它很容易使用。 我在appsettings.json

中添加了下一行
{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  },

  "XXXOptions": {
    "X1": {
      "AppId": "11",
      "AppCode": "22"
    },
    "X2": {
      "AppId": "",
      "AppCode": ""
    }
  }
}

我添加了自定义类

 public class XXXOptions
    {
        public XXXOptions()
        {
        }
        public X1 X1{ get; set; }
        public X2 X2{ get; set; }
    }

    public class X1
    {
        public int AppId { get; set; }
        public int AppCode { get; set; }
    }

    public class X2
    {
        public int AppId { get; set; }
        public int AppCode { get; set; }
    }

我将下一个代码添加到Startup.cs

  public void ConfigureServices(IServiceCollection services)
        {
            // Adds services required for using options.
            services.AddOptions();

            // Register the IConfiguration instance which MyOptions binds against.
            services.Configure<XXXOptions>(Configuration);

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

 public class XXXController : Controller
    {
        private readonly XXXOptions _options;
        public XXXController(IOptions<XXXOptions> optionsAccessor)
        {
            _options = optionsAccessor.Value;
        }

        public IActionResult Index()
        {
            var option1 = _options.X1;
            return Content($"option1 = {option1.AppCode}, option2 = {option1.AppId}");
            return View();
        }
    }

optionsAccessor.Value - 值包含XXXController构造函数中的空值。

但似乎框架在 Configuration 属性中的JsonConfigurationProvider中显示mappet值

任何想法?

1 个答案:

答案 0 :(得分:2)

ConfigureServices方法更改:

services.Configure<XXXOptions>(Configuration);

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