         return nil
     }
 
-    public func create(str: String) -> AnyObject? {
+    private func create(str: String) -> AnyObject? {
         let obj: AnyObject? = creationMethods[str]?()
         self.setInjectorIfPossible(obj)
         return obj


    private var creationMethods : [String: (Void) -> (AnyObject)] = [:]

    public func create(klass: AnyClass) -> AnyObject? {
        if let closure : (Void) -> (AnyObject) = creationMethods[klass.description()] {
            let obj : AnyObject = closure()
            self.setInjectorIfPossible(obj)

        }
    }
    
    // MARK: Adding bindings

    public func bind(obj: Any, @autoclosure(escaping) to: () -> (AnyObject)) {
        if let klass: AnyClass = obj as? AnyClass {
            bind(klass, to: to)
        } else if let str = obj as? String {
            bind(str, to: to)
        }
    }

    private func bind(klass: AnyClass, @autoclosure(escaping) to: () -> (AnyObject)) {
        self.creationMethods[klass.description()] = to
    }

    private func bind(string: String, @autoclosure(escaping) to: () -> (AnyObject)) {
        self.creationMethods[string] = to
    }

    public func bind(obj: Any, toClosure: (Void) -> (AnyObject)) {
        if let klass: AnyClass = obj as? AnyClass {
            bind(klass, toClosure: toClosure)
        } else if let str = obj as? String {
            bind(str, toClosure: toClosure)
        }
    }

    private func bind(klass: AnyClass, toClosure: (Void) -> (AnyObject)) {
        self.creationMethods[klass.description()] = toClosure
    }
    
    private func bind(string: String, toClosure: (Void) -> (AnyObject)) {
        self.creationMethods[string] = toClosure
    }

    public func removeBinding(obj: Any) {
        if let klass: AnyClass = obj as? AnyClass {
            removeBinding(klass)
        } else if let str = obj as? String {
            removeBinding(str)
        }
    }
    
    private func removeBinding(klass: AnyClass) {
        self.creationMethods.removeValueForKey(klass.description())
    }
    
    private func removeBinding(string: String) {
        self.creationMethods.removeValueForKey(string)
    }
}
