私は設定サーバーから構成を取り出し、静的変数を設定する静的ctorを持っています。スタティックctorが(マルチスレッド環境で)実行を完了する前にクラスのインスタンス(通常のctor)が作成される可能性はありますか?
私は、その構成に基づいていくつかのプロパティをインスタンス化する通常のctorを持っています。各要求はMyClass
をインスタンス化し、DoSomething
方法を実行し、私は複数の要求を受信WCFサービスを持っていると仮定すると
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
}
}
:
はここに私のクラスの例です。
スタティックctorは、結果が得られるまでに時間がかかるWebサービスコールを実行します。
のいずれかの要求のインスタンスがMyClass
になる前に、スタティックctorの実行が終了することはありますか?
私は静的なctorsがスレッドセーフであることを知っています。
スタティックctorの実行が完了するまで、新しいインスタンスの作成はロックされていますか?
これは_before_と呼ばれますが、どのインスタンスも作成されるため、確信できます。しかし、静的コンストラクタから_web service_を呼び出すことがどれほど難しいかを理解していただければ幸いです。 – Evk
私はあなたのデザインを弱体化するのは嫌いですが、静的なコンストラクタを使って時間がかかる外部サービスを呼び出すことは、私にとっては本当に悪い考えのように思えます。 –
@MarcGravell Evk - 答えてくれてありがとう。 デザインがベストプラクティスではないことを理解しており、より良い解決策を探しています。 設定サーバーから設定を取得するサービスがあると仮定すると、クラスをインスタンス化する前にconfigを取得するのに最適な方法は何ですか? 設定が必要なプロパティがいくつかあり、すべてのリクエスト(たとえば作業ユニット)でインスタンス化する必要があります。 ありがとうございます。 –