在 ASP .NET 中使用静态 Class 初始化另一个静态 Class 的成员
Using a Static Class to Initialize Members of another Static Class in ASP .NET
静态 class 是否可以使用来自不同命名空间的另一个静态 class 中设置的值来初始化它的一些成员?有没有规定他们建立的顺序?
例如
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,并且所有惰性字段都将按照需要的顺序以级联方式进行初始化。
静态 class 是否可以使用来自不同命名空间的另一个静态 class 中设置的值来初始化它的一些成员?有没有规定他们建立的顺序?
例如
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,并且所有惰性字段都将按照需要的顺序以级联方式进行初始化。