使用静态类初始化 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,并且所有惰性字段都将按照所需的顺序以级联方式初始化。

最新更新