using JD.Kernel.Classes;
using JD.Kernel.StaticHelpers;
namespace JD.TeaBoxAddinSystem.Addins
{
///
/// Create a delay between the assignation of a value and its creation. Perfect for lazy loading.
///
/// Type of its internal value.
public class ThreadSafeReference : Reference
{
#region Variables
private readonly object m_lock = new object();
private readonly Provider m_provider;
#endregion
#region Constructor/Destructor
private ThreadSafeReference(Provider provider)
{
m_provider = provider;
}
public new static ThreadSafeReference FromDelegate(Provider provider)
{
return new ThreadSafeReference(provider);
}
#endregion
#region Properties
public override T Value
{
get
{
if (!IsInitialized)
{
lock (m_lock)
{
return base.Value;
}
}
return base.Value;
}
}
#endregion
#region Methods
protected override T LoadValue()
{
return m_provider();
}
#endregion
}
}