       - 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 init(required: Bool = true, tag: DependencyTagConvertible? = nil, didInject: T -> () = { _ in }) {
+  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 as? AnyObject
     super.init(required: required, tag: tag, didInject: didInject)
   }
-  
+
   public func resolve(container: DependencyContainer) throws {
     let resolved: T? = try super.resolve(container)
     if required && !(resolved is AnyObject) {

      fatalError("Can not set required property to nil.")
    }
    
    let injected = Injected(required: required, tag: tag, didInject: didInject)
    injected.value = value
    return injected
  }
  
}

    return T.self
  }

  private weak var _value: AnyObject? = nil {
    didSet {
      if let value = value { didInject(value) }
    }
