     return T.self
   }
 
-  weak var _value: AnyObject? = nil {
+  private weak var _value: AnyObject? = nil {
     didSet {
       if let value = value { didInject(value) }
     }

      fatalError("Can not set required property to nil.")
    }

    let injected = InjectedWeak(required: required, tag: tag, didInject: didInject)
    injected._value = _value
    return injected
  }

}

      - didInject: block that will be called when concrete instance is injected in this property. 
                   Similar to `didSet` property observer. Default value does nothing.
  */
  public override convenience init(required: Bool = true, tag: DependencyTagConvertible? = nil, didInject: T -> () = { _ in }) {
    self.init(value: nil, required: required, tag: tag, didInject: didInject)
  }
  
  private init(value: T?, required: Bool = true, tag: DependencyTagConvertible? = nil, didInject: T -> ()) {
    self.value = value
    super.init(required: required, tag: tag, didInject: didInject)
  }
  
