  `Name.default` is used for the default name of a container or type when one is not specified.
  */
 public enum Name {
+    /**
+     `Name.default` is used for the default name of a container or type when one is not specified.
+     */
     case `default`
 }
 

    /**
     Register the `registration` block with Guise under the given name and in the given container.
     
     - parameter name: The name under which to register the `registration` block.
     - parameter container: The container in which to register the `registration` block.
    */
    public static func register<P, T, N: Hashable, C: Hashable>(name: N, container: C, lifecycle: Lifecycle = .notCached, registration: @escaping Registration<P, T>) -> Key {
        return register(key: Key(type: T.self, name: name, container: container), lifecycle: lifecycle, registration: registration)
    }
    
    public static func register<P, T, N: Hashable>(name: N, lifecycle: Lifecycle = .notCached, registration: @escaping Registration<P, T>) -> Key {
        return register(key: Key(type: T.self, name: name, container: Name.default), lifecycle: lifecycle, registration: registration)
    }

    
    func resolve<T>(_ parameter: Any, lifecycle: Lifecycle) -> T {
        var result: T
        let lifecycle = lifecycle == .once ? self.lifecycle : lifecycle
        if lifecycle == .cached {
            if instance == nil {
                instance = registration(parameter)
