プロパティインジェクションでテストできるレイジープロパティを作成したいと思います。レイジーフィールドを使用する場合、テスト中に自分のフィールドをどのように注入できるかわかりません。これが私のコードです:
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チームからの約束があるかどうか疑問に思っていますか?ドキュメントからは明らかではありませんでした。