У меня есть статический ctor, который извлекает конфигурацию с моего сервера конфигурации и устанавливает статическую переменную.Есть ли шанс, что экземпляр класса (обычный ctor) будет создан до того, как статический 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 выполняет вызов веб-службы, который занимает некоторое время, пока не получит результат.
Могу ли я быть уверенным, что статический ctor завершит работу до любым запросом получит экземпляр MyClass
?
Я знаю, что статические ctors являются потокобезопасными.
Есть ли какой-либо замок при создании новых экземпляров, пока статический ctor не завершится?
Это будет называться _before_, создается любой экземпляр, так что да, вы можете быть уверены. Однако я надеюсь, что вы понимаете, как плохо называть _web service_ от статического конструктора. – Evk
Мне не нравится подрывать ваш дизайн, но наличие статического конструктора вызывает внешнюю службу, которая требует времени (и может по определению: сбой) кажется мне очень плохой идеей. –
@MarcGravell Evk - Спасибо за ответ. Я понимаю, что дизайн - это не лучшая практика, и я ищу лучшее решение. Предполагая, что у вас есть служба, которая извлекает конфигурацию с сервера конфигурации, каков наилучший способ получения конфигурации до создания экземпляра класса? У меня есть некоторые свойства, которые нуждаются в конфигурации и должны быть созданы при каждом запросе (например, в единице работы). Спасибо. –