  - seealso: `InjectedWeak`
 
 */
-public final class Injected<T>: _InjectedPropertyBox<T>, _AnyInjectedPropertyBox {
-  
-  var _value: Any? = nil {
+public final class Injected<T>: _InjectedPropertyBox<T>, AutoInjectedPropertyBox {
+  
+  public static var wrappedType: Any.Type {
+    return T.self
+  }
+
+  ///Wrapped value.
+  public private(set) var value: T? {
     didSet {
       if let value = value { didInject(value) }
     }
-  }
-  
-  ///Wrapped value.
-  public var value: T? {
-    return _value as? T
   }
 
   /**

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