.net核心中的库配置?

时间:2017-05-30 15:14:56

标签: c# configuration .net-core

开始将我们的一些库移植到.Net Core,并且众所周知,与Framework相比,配置处理发生了很大变化。以前,我们使用app.config.transforms来注入所需的设置(虽然我从不喜欢这个选项tbh),然后通过一些处理类型转换和后备等的静态配置类公开(我也不是真的喜欢)。但是由于app.config正在走向渡渡鸟的道路,显然它不再是未来的选择,所以我不妨投入一些努力来获得一个很好的解决方案。

那么:处理库/ nuget包配置的建议是什么,特别是在.Net Core的上下文中?另外关于(在我看来)不知道主机应用程序将使用哪种配置(ini,json,...)?

1 个答案:

答案 0 :(得分:1)

在dotnet核心中有一个新的配置系统,它支持xml,json或ini。您还可以将环境变量作为此系统的一部分进行读取。我不确定库应该使用配置。我认为通过构造函数/方法参数获取选项会更有意义。

如果您的图书馆接收IConfigurationSection,可以由来电者传递。您的库应该能够读取应用程序为您的库配置的设置。您甚至可以要求输入IOptions<YourTyppedConfigurationSection>

的对象

在dotnet核心中,一个常见的模式似乎有一个基本文件的json文件,然后为每个环境提供一个特定的文件。

因此,假设您有appsettings.json,您可能还有appsettings.{environment}.json,如果设置了环境变量ASPNETCORE_ENVIRONMENT,则会使用appsettings.{environment}.json作为覆盖基础文件。

这是Startup.cs文件中典型的代码集,即新Global.asax

            var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();

Msft有一个很好的文档解释,所有关于这里的配置系统:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration