Pregunta

Me gustaría hacer una propiedad perezosa que pueda ser probada con inyección de propiedad.Si tuviera que usar un campo perezoso, no veo cómo podría inyectar mi propia durante las pruebas.Aquí está mi código:

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;
   }
}

Me pregunto si hay una promesa del equipo de BCL que este código es seguro de hilos?No estaba claro de Documentación .

¿Fue útil?

Solución

del enlace de documentación:

Los métodos de ligainitializante son seguros de roscas y pueden llamarse de forma múltiple de hilos simultáneamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top