配置文件appsettings.json

1 本篇概述

  本篇描述appsettings.json的使用,包括:

  • 配置的基本读取
  • 读取配置信息到自定义的对象
  • 自定义配置文件

1 配置的基本读取

  要读取的配置文件内容如下:

{
  "ConnString": "MySQL Connect String",
  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Console": {
      "LogLevel": {
        "Default": "Warning"
      }
    }
  },
  "SystemConfig": {
    "UploadFile": "d:\\files",
    "AnnexUrl": "http://192.168.0.177:81/",
    "Admin": {
      "Name": "admin",
      "Age": "31",
      "Allow": "True"
    },
    "DefaultPassword": "123456"
  }
}

  读取配置文件的方法如下:

public class Startup
    {
        public Startup(IConfiguration configuration,IHostingEnvironment env)
        {
            Configuration = configuration;
            _env = env;
        }

        public IConfiguration Configuration { get; }
        public IHostingEnvironment _env { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();

            var ConnString = Configuration["ConnString"];        
            var UploadFile = Configuration.GetSection("SystemConfig")["UploadFile"];  
            var AdminName = Configuration.GetSection("SystemConfig").GetSection("Admin")["Name"];           
        }       
    }

  还有一种读法:

ConnString = Configuration["ConnString"];
UploadFile = Configuration["SystemConfig:UploadFile"];
AdminName = Configuration["SystemConfig:Admin:Name"];  

  这里Startup类在构造时已经帮我们注入了Configuration,如果要在自己的Controller内使用,需要自己注入。

public class ValuesController: Controller
{
    private IConfiguration _configuration;
    public ValuesController(IConfiguration configuration)
        {
            _configuration = configuration;
        }
        [HttpGet]
    public IEnumerable < string > Get()
    {
        var ConnString = _configuration["ConnString"];
        return new string[]
        {
            "value1", "value2"
        };
    }
}

2 读取配置信息到自定义的对象

  新建一个类,用来存储配置信息,类的结构应和配置文件一致。

public class SystemConfig
{
    public String UploadFile
    {
        get;
        set;
    }
    public String AnnexUrl
    {
        get;
        set;
    }
    public User Admin
    {
        get;
        set;
    }
    public String DefaultPassword
    {
        get;
        set;
    }
}
public class User
{
    public String Name
    {
        get;
        set;
    }
    public int Age
    {
        get;
        set;
    }
    public bool Allow
    {
        get;
        set;
    }
}

  在startup类的ConfigureServices方法内,提供如下代码:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }
    public IConfiguration Configuration
    {
        get;
    }
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        services.AddOptions();
        services.Configure < SystemConfig > (Configuration.GetSection("SystemConfig"));
    }
}
}

  然后在Controller中进行注入并使用。

public class ValuesController: Controller
{
    private IOptions < SystemConfig > _setting;
    public ValuesController(IOptions < SystemConfig > setting)
        {
            _setting = setting;
        }
        [HttpGet("setting")]
    public IEnumerable < string > GetSetting()
    {
        var UploadFile = _setting.Value.UploadFile;
        var AdminName = _setting.Value.Admin.Name;
        var AdminAge = _setting.Value.Admin.Age;
        var AdminAllow = _setting.Value.Admin.Allow;
        return new string[]
        {
            "value1", "value2"
        };
    }
}

  可以看到,这样在业务方法内通过 _setting 来都取配置信息就非常方便了。

3 自定义配置文件

  以上操作的是系统默认的配置文件appsettings.json。如果我们需要增加自己的配置文件该如何处理?

  新建一个配置文件:mysetting.json

{
  "ConnString": "MySQL Connect String",  
  "SystemConfig": {
    "UploadFile": "d:\\myfiles",
    "AnnexUrl": "http://192.168.0.177:81/my",
    "Admin": {
      "Name": "myadmin",
      "Age": "131",
      "Allow": "False"
    },
    "DefaultPassword": "654321"
  }
}

  在Startup类的ConfigureServices方法输入以下代码:

public class Startup
{
    public Startup(IConfiguration configuration, IHostingEnvironment env)
    {
        Configuration = configuration;
        _env = env;
    }
    public IConfiguration Configuration
    {
        get;
    }
    public IHostingEnvironment _env
    {
        get;
    }
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        var rootpath = _env.ContentRootPath;
        var builder = new ConfigurationBuilder().SetBasePath(_env.ContentRootPath).AddJsonFile("mysetting.json", optional: true, reloadOnChange: true).AddEnvironmentVariables();
        var MyConfiguration = builder.Build();
        services.AddOptions();
        services.Configure < SystemConfig > (MyConfiguration.GetSection("SystemConfig"));
    }
}

  用自己创建的Configuration进行服务的注册,创建过程中需要用到IHostingEnvironment,这个对象在Startup类构建时进行注入。

  剩下的用法和默认配置用法就一样了。

版权声明: 本文为智客工坊「seabluescn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

results matching ""

    No results matching ""