我有一个静态 ctor 从我的配置服务器获取配置并设置静态变量。
我有一个常规的 ctor 根据该配置实例化一些属性。
这是我的班级示例:
public class MyClass
{
private static MyConfig _config;
private UnitOfWork _uow;
static MyClass(){
// This takes some time since it's a web service call!!!
_config = ConfigService.GetConfig();
}
public MyClass(){
_uow = CreateUow(_config.UOWConnectionString);
}
public Response DoSomething(){
// logic with _uow
}
}
假设我有一个接收多个请求的 WCF 服务,则每个请求都会实例化MyClass
并运行 DoSomething
方法。
静态 ctor 执行 Web 服务调用,该调用需要一些时间才能获得结果。
我能否确定静态 ctor 将在任何请求收到 MyClass
实例之前完成运行?
我知道静态 ctor 是线程安全的。
在静态 ctor 完成运行之前创建新实例是否有任何锁定?
静态构造函数保证在创建任何实例之前运行。来自MSDN。
自动调用静态构造函数来初始化类 在创建第一个实例或任何静态成员之前 引用。