开始将我们的一些库移植到 .Net Core,众所周知,与 Framework 相比,配置处理发生了很大变化。以前,我们使用 app.config.transforms注入(inject)所需的设置(虽然我从来不喜欢那个选项 tbh),然后通过一些处理类型转换和回退等的静态配置类公开这些设置(我也不太喜欢)。但随着 app.configs 走上 Dodo 的道路,这显然不再是 future 的选择,所以我不妨付出一些努力来获得一个好的解决方案。
那么:关于处理库/nuget 包配置的建议是什么,尤其是在 .Net Core 的上下文中?另外关于(在我看来)不知道主机应用程序将使用哪种配置(ini、json、...)?
最佳答案
在 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://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration
关于c# - .net 核心中的库配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44265985/