开始将我们的一些库移植到.Net Core,并且众所周知,与Framework相比,配置处理发生了很大变化。以前,我们使用app.config.transforms来注入所需的设置(虽然我从不喜欢这个选项tbh),然后通过一些处理类型转换和后备等的静态配置类公开(我也不是真的喜欢)。但是由于app.config正在走向渡渡鸟的道路,显然它不再是未来的选择,所以我不妨投入一些努力来获得一个很好的解决方案。
那么:处理库/ nuget包配置的建议是什么,特别是在.Net Core的上下文中?另外关于(在我看来)不知道主机应用程序将使用哪种配置(ini,json,...)?
答案 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