c# - 在 ASP .NET 中使用静态类初始化另一个静态类的成员
问题描述
无论如何,静态类是否可以使用来自不同命名空间的另一个静态类中设置的值来初始化它的一些成员?反正有没有规定他们建立的顺序?
例如
namespace Utility
{
using Config;
public static class Utility
{
public static UtilityObject myUtil = new UtilityObject(ConfigContext.myValue)
}
}
...
// somewhere in a different file/project
...
namespace Config
{
public static class ConfigContext
{
public static string myValue => ConfigurationManager.AppSettings["key"];
}
}
这是我试图完成的基本模式的简化示例;我想获取加载到的配置文件中的值static class ConfigContext
,并使用它们来初始化static class Utility
.
解决方案
您不能指定静态初始化的顺序。但是你可以通过延迟初始化使用惰性逻辑来完全避免这个问题。
public static class Utility
{
private static Lazy<UtilityObject> _myUtil = null;
private static Utility()
{
_myUtil = new Lazy<UtilityObject>( () => new UtilityObject(ConfigContext.myValue) );
}
public static myUtil => _myUtil.Value;
}
使用这种技术,实用程序对象在实际使用之前不会被初始化。
如果初始化的逻辑ConfigContext
有类似的问题,您也可以在那里使用 Lazy,并且您的所有惰性字段都将以级联方式按照需要的顺序进行初始化。
推荐阅读
- json - Swift:当您不知道键的名称或值的数据类型时如何使用 JSON
- excel - VBA 用公式查找和替换(无法更新行)
- sql-server - 使用具有多个参数的 SSRS 从 SQL Server 生成和下载报告
- javascript - Discord Bot 触发其他机器人动作
- pip - Pycharm卡在“安装包”,如何获取日志信息?
- azure-maps - 是否可以从 Azure 地图中删除标签?
- javascript - javascript - 正则表达式 - 重复标签匹配综合症
- javascript - array.map 需要索引但不需要 currentValue
- r - 行绑定列表列表中包含的多个数据框
- c - 调整大小程序适用于某些人而不适用于其他人