如何从 .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.
之后无法再更改
我正在尝试将遗留的 .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.