【问题标题】:Library configuration in .net core?.net 核心中的库配置?
【发布时间】:2017-05-30 15:14:55
【问题描述】:

开始将我们的一些库移植到 .Net Core,众所周知,与 Framework 相比,配置处理发生了很大变化。以前,我们使用app.config.transforms 注入所需的设置(尽管我从不喜欢那个选项tbh),然后通过一些处理类型转换和回退等的静态配置类公开这些设置(我也不太喜欢)。但是由于 app.configs 正在走 Dodo 的道路,这显然不会再成为未来的选择,所以我不妨努力寻找一个好的解决方案。

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

【问题讨论】:

    标签: c# configuration .net-core


    【解决方案1】:

    在 dotnet core 中有一个新的配置系统,它支持 xml、json 或 ini。作为该系统的一部分,您还可以读取环境变量。我不太确定图书馆应该使用配置。我认为通过构造函数/方法参数接受选项会更有意义。

    也就是说,如果您的库接受IConfigurationSection,则可以由调用者传递。您的库应该能够读取应用程序为您的库配置的设置。你甚至可以使用IOptions<YourTyppedConfigurationSection> 请求一个类型化的对象

    在 dotnet core 中,一个常见的模式似乎有一个 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

    【讨论】:

    • > 我不太确定库应该使用配置。好吧,如果组件需要进入数据库,它需要一些配置输入;)无论如何,是的,我也在考虑 IOptions 前端,在模块中定义了一些默认配置,这些配置可以被消费者覆盖。感谢您的投入:)
    • 我正在编写一个必须调用 API 的库,每个环境的 API url 都会发生变化。为什么图书馆的消费者必须知道我的 api url 是什么?
    猜你喜欢
    • 1970-01-01
    • 2020-09-08
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 2017-03-08
    • 1970-01-01
    相关资源
    最近更新 更多