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