     super.init(required: required, tag: tag, didInject: didInject)
   }
   
-  private func resolve(container: DependencyContainer) throws {
+  public func resolve(container: DependencyContainer) throws {
     let resolved: T? = try super.resolve(container)
-    _value = resolved
+    value = resolved
   }
   
 }

  }
  
  private func _resolveChild(child: Mirror.Child) throws {
    guard let injectedPropertyBox = child.value as? _AnyInjectedPropertyBox else { return }
    
    do {
      try injectedPropertyBox.resolve(self)

 - seealso: `Injected`
 
 */
public final class InjectedWeak<T>: _InjectedPropertyBox<T>, AutoInjectedPropertyBox {

  //Only classes (means AnyObject) can be used as `weak` properties
  //but we can not make <T: AnyObject> because that will prevent using protocol as generic type
  //so we just rely on user reading documentation and passing AnyObject in runtime
  //also we will throw fatal error if type can not be casted to AnyObject during resolution.

  public static var wrappedType: Any.Type {
    return T.self
  }

  weak var _value: AnyObject? = nil {
    didSet {
