如何从 .net 6 中的 ConfigurationManager 迁移出去

how to migrate away from ConfigurationManager in .net 6

我正在尝试将遗留的 .net 框架项目迁移到 .net 6

一个问题是我们有一个常量class,它包含这样的代码:

public static class Constants
{
   public static int MaxCodes = Convert.ToInt32(ConfigurationManager.AppSettings["MaxCodes"] ?? "250");
}

我怎样才能将它移动到 .net 6?我认为 IConfiguration 在静态 class 中不可注入,因此需要将此 class 更改为非静态并使用 services.AddSingleton.

但这意味着引用的代码中有很多代码更改。还有其他方法吗?

Are there other ways to do it?

您可以坚持使用静态 class 并将依赖项传递给您在 bootstrap.

上调用的自定义 Initialize 方法
public static class Constants
{
    private static bool _isInitialized;

    static Constants()
    {
        _isInitialized = false;
    }

    static void Initialize(IConfiguration configurationManager)
    {
        if (!_isInitialized)
        {
            MaxCodes = Convert.ToInt32(configurationManager.AppSettings["MaxCodes"] ?? "250");
            _isInitialized = true;
        }
    }

    public static int MaxCodes { get; private set; }
}

_isInitialized 标志和私有设置器确保状态在 bootstrap.

之后无法再更改