public SettableLazy(T value, Func <T> factory, SettableLazyThreadSafetyMode mode)
 {
     if (null == factory)
     {
         throw new ArgumentNullException("factory");
     }
     if (!Enum.IsDefined(typeof(SettableLazyThreadSafetyMode), mode))
     {
         throw new ArgumentOutOfRangeException("mode");
     }
     _lock      = (_mode = mode) == SettableLazyThreadSafetyMode.None ? null : new object();
     _value     = value;
     _factory   = factory;
     _isCreated = true;
 }
 public SettableLazy(T value, SettableLazyThreadSafetyMode mode)
     : this(value, () => Activator.CreateInstance <T>(), mode)
 {
 }
 public SettableLazy(Func <T> factory, SettableLazyThreadSafetyMode mode)
     : this(default(T), factory, mode)
 {
     _isCreated = false;
 }