c# - .net 核心中的库配置?

标签 c# configuration .net-core

开始将我们的一些库移植到 .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/

相关文章:

c# - 为什么 `j=++i+++i;` 在 C# 和 C 中的输出不同?

hibernate - hibernate.jdbc.fetch_size 的默认大小是多少?

linux - ASP.NET Core Angular 应用程序无法在带有 Nginx 和 Systemd 的 Ubuntu 16.04 上运行

c# - FileOptions.DeleteOnClose Windows 是特定的吗?

c# - ConcurrentDictionary ContainsKey 方法是否同步?

c# - C#8“默认”是什么?对泛型类型做什么?

scala - 使用 typesafe 的配置来管理我的数据库连接

linux - 配置 apache 服务器以访问文件以供 php 执行

c# - 将 HostBuilder.ConfigureServices 与 DryIoc 容器一起使用?

java - 测量代码行 (LoC),包括相对权重