     }
     
     public final func unshared<T>(name: String = #function, _ factory: @autoclosure () -> T, configure: ((T) -> Void)? = nil) -> T {
-        var unsharedInstances: [String:AnyObject] = [:]
+        var unsharedInstances: [String:Any] = [:]
         return inject(
-            lifecyle: .Unshared,
+            lifecyle: .unshared,
             name: name,
-            instancePool: &unsharedInstances,
-            containerFactory: { StrongContainer(instance: $0) },
+            instances: &unsharedInstances,
             factory: factory,
             configure: configure
         )

    
    public final func shared<T>(name: String = #function, _ factory: @autoclosure () -> T, configure: ((T) -> Void)? = nil) -> T {
        return inject(
            lifecyle: .Shared,
            name: name,
            instancePool: &sharedInstances,
            containerFactory: { StrongContainer(instance: $0) },
            factory: factory,
            configure: configure
        )

        let instance = factory()
        instanceStack.removeLast()
        
        instances[name] = instance
        
        if let configure = configure {
            configureStack.append({configure(instance)})
