博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何在 ASP.Net Core 中使用 Configuration Provider
阅读量:4035 次
发布时间:2019-05-24

本文共 4242 字,大约阅读时间需要 14 分钟。

ASP.NET Core 是一个开源的,跨平台的,精简的模块化框架,可用于构建高性能,可扩展的web应用程序, ASP.NET Core 中的数据配置常用 k-v 的形式存储,值得注意的是,新的数据配置还支持 层级方式,在这篇文章中,我们将会讨论如何在 ASP.NET Core 中去使用。

默认创建好的 ASP.Net Core 应用程序中会有两个json配置文件:appsettings.jsonappsettings.Development.json, 如下图所示:

使用 Json Provider

现在你可以使用 appsettings.json 来存放应用程序的配置数据。比如:数据库连接串,应用程序特定配置,下面的代码片段展示了如何使用 IConfigurationBuilder.AddJsonFile() 将 appsettings.json 添加到配置系统中。

 public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>         WebHost.CreateDefaultBuilder(args)             .ConfigureAppConfiguration((hostingContext, config) =>             {                 var env = hostingContext.HostingEnvironment;                 config.SetBasePath(env.ContentRootPath);                 config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);             })             .UseStartup
();

接下来看一下 appsettings.json 文件的具体内容。

{  "Logging": {    "LogLevel": {      "Default": "Warning"    }  },  "AllowedHosts": "*",  "CustomKeys": {    "KeyA": "ValueA",    "KeyB": "ValueB"  }}

要想从 appsettings.json 中读取到配置key,可以从 IConfiguration 实例中进行读取,比如说:想要从 Controller 中读取 Configuration,只需要通过依赖注入的方式将 Configuration 注入到 Controller 即可,如下代码所示:

    public class HomeController : Controller    {        private readonly ILogger
 _logger;        IConfiguration _configuration;        public HomeController(ILogger
 logger, IConfiguration configuration)        {            _logger = logger;            _configuration = configuration;        }    }

下面的代码片段展示了如何通过 IConfiguration 实例 从 appsettings.json 文件中读取自定义的 CustomerKeys 节。

        public IActionResult Index()        {            var keyA = _configuration["CustomKeys:KeyA"];            var keyB = _configuration["CustomKeys:KeyB"];            return View();        }

下面是 HomeController 类的完整代码。

    public class HomeController : Controller    {        private readonly ILogger
 _logger;        IConfiguration _configuration;        public HomeController(ILogger
 logger, IConfiguration configuration)        {            _logger = logger;            _configuration = configuration;        }        public IActionResult Index()        {            var keyA = _configuration["CustomKeys:KeyA"];            var keyB = _configuration["CustomKeys:KeyB"];            return View();        }    }

除了默认生成的 appsettings.json,你还可以使用自定义的json文件给应用程序提供特定的配置信息,换句话说,可以不用将所有的配置信息都放置在 appsettings.json 中,比如你可以创建一个自定义的 customsettings.json,然后在 CreateWebHostBuilder() 中将其灌入到配置系统中,如下代码所示:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>         WebHost.CreateDefaultBuilder(args)             .ConfigureAppConfiguration((hostingContext, config) =>             {                                 var env = hostingContext.HostingEnvironment;                 string pathOfCommonSettingsFile = env.ContentRootPath;                 config.SetBasePath(env.ContentRootPath);                 config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);                 config.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);                 config.AddJsonFile(Path.Combine(pathOfCommonSettingsFile, "customsettings.json"), optional: true);             })             .UseStartup
();

使用 Memory Provider

所谓的 Memory Provider 允许我们将应用程序的一些配置直接配置到内存,而不像传统方式那样一定要指定一个 物理文件, 下面的代码展示了如何使用 Memory Provider 将 key-value 存放在内存中。

            var builder = new ConfigurationBuilder();            var profileCollection = new Dictionary
            {                {"AuthorProfile:FirstName", "Joydip"},                {"AuthorProfile:LastName", "Kanjilal"},                {"AuthorProfile:Address", "Hyderabad, India"}            };            builder.AddInMemoryCollection(profileCollection);            Configuration = builder.Build();

灌到内存之后,接下来就可以通过 IConfiguration 实例获取了,如下代码所示:

var firstName = _configuration["Profile:FirstName"];

值得注意的是,和传统的 ASP.NET 相比, ASP.NET Core 中的配置文件数据有变更时,默认情况下应用程序是不会感知的,如果要做到感知的话,通常有两种做法。

  • 重启应用程序

  • 调用 IConfigurationRoot.Reload()

对了,除了上文提到了json和memory,ASP.NET Core 还支持众多的数据格式,如:JSON, XML,INI。

译文链接:https://www.infoworld.com/article/3310608/how-to-use-configuration-providers-in-aspnet-core.html

转载地址:http://paudi.baihongyu.com/

你可能感兴趣的文章
除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单
查看>>
解析zookeeper的工作流程
查看>>
搞定Java面试中的数据结构问题
查看>>
慢慢欣赏linux make uImage流程
查看>>
linux内核学习(7)脱胎换骨解压缩的内核
查看>>
以太网基础知识
查看>>
慢慢欣赏linux 内核模块引用
查看>>
kprobe学习
查看>>
慢慢欣赏linux phy驱动初始化2
查看>>
慢慢欣赏linux CPU占用率学习
查看>>
2020年终总结
查看>>
linux内核学习(4)建立正式内核的页式内存映射, 以x86 32位模式为例
查看>>
慢慢欣赏linux 查看硬盘情况
查看>>
慢慢欣赏linux vsftpd的使用
查看>>
慢慢欣赏linux 思考中的问题
查看>>
慢慢欣赏linux switch_to学习
查看>>
慢慢欣赏linux CPU占用率和负载
查看>>
设计模式学习
查看>>
慢慢欣赏linux seq_file
查看>>
慢慢欣赏linux 设备树device tree
查看>>