1

プロパティインジェクションでテストできるレイジープロパティを作成したいと思います。レイジーフィールドを使用する場合、テスト中に自分のフィールドをどのように注入できるかわかりません。これが私のコードです:

private IExpensive expensive;
private bool expensiveInitialized;
private object expensiveLockingObject = new object();

public IExpensive Expensive
{
   get
   {
      LazyInitializer.EnsureInitialized(ref expensive, ref expensiveInitialized, ref expensiveLockingObject,
         () => new Expensive(myStaticArg1, myStaticArg2, ...));

      return expensive;
   }
   internal protected set
   {
      expensiveInitialized = true;
      expensive = value;
   }
}

このコードがスレッドセーフであるというBCLチームからの約束があるかどうか疑問に思っていますか?ドキュメントからは明らかではありませんでした。

4

1 に答える 1

2

ドキュメントリンクから:

LazyInitializerのメソッドはスレッドセーフであり、複数のスレッドから同時に呼び出すことができます。

于 2011-05-12T20:05:05.923 に答える