         )
     }
     
-    public final func weakShared<T: AnyObject>(@noescape factory: () -> T, name: String = #function, configure: ((T) -> ())? = nil) -> T {
+    public final func weakShared<T: AnyObject>(factory: @noescape () -> T, name: String = #function, configure: ((T) -> ())? = nil) -> T {
         return weakShared(name, factory: factory(), configure: configure)
     }
     
-    public final func weakShared<T: AnyObject>(@autoclosure factory: () -> T, name: String = #function, configure: ((T) -> ())? = nil) -> T {
+    public final func weakShared<T: AnyObject>(factory: @autoclosure () -> T, name: String = #function, configure: ((T) -> ())? = nil) -> T {
         return weakShared(name, factory: factory, configure: configure)
     }
     
-    public final func weakShared<T: AnyObject>(_ name: String, @autoclosure factory: () -> T, configure: ((T) -> ())? = nil) -> T {
+    public final func weakShared<T: AnyObject>(_ name: String, factory: @autoclosure () -> T, configure: ((T) -> ())? = nil) -> T {
         return inject(
             lifecyle: .WeakShared,
             name: name,

        )
    }
    
    public final func unshared<T>(@noescape factory: () -> T, name: String = #function, configure: ((T) -> ())? = nil) -> T {
        return unshared(name, factory: factory(), configure: configure)
    }
    
    public final func unshared<T>(@autoclosure factory: () -> T, name: String = #function, configure: ((T) -> ())? = nil) -> T {
        return unshared(name, factory: factory, configure: configure)
    }
    
    public final func unshared<T>(_ name: String, @autoclosure factory: () -> T, configure: ((T) -> ())? = nil) -> T {
        var unsharedInstances: [String:AnyObject] = [:]
        return inject(
            lifecyle: .Unshared,

        )
    }
    
    private final func inject<T, C: InstanceContainer where C.InstanceType == T>(lifecyle: Lifecyle, name: String, instancePool: inout [String:AnyObject], containerFactory: (T) -> C, factory: @autoclosure () -> T, configure: ((T) -> ())?) -> T {
        if let container = instancePool[name] as? C {
            if let instance = container.instance {
                return instance
