     private static var dependencies = [Key: Dependency]()
     
     public static func register<P, D, C: Hashable, N: Hashable>(container: C, name: N, lifecycle: Lifecycle = .notCached, resolve: @escaping (P) -> D) -> Key {
-        let key = Key(type: String(reflecting: D.self), container: container, name: name)
+        let key = Key(type: D.self, container: container, name: name)
         withWriteLock {
             dependencies[key] = Dependency(lifecycle: lifecycle, resolve: resolve)
         }

        return Guise.register(container: Container.default, name: Name.default, lifecycle: lifecycle, resolve: resolve)
    }

}

    
    public static func register<P, D>(lifecycle: Lifecycle = .notCached, resolve: @escaping (P) -> D) -> Key {
        return register(container: Container.default, name: Name.default, lifecycle: lifecycle, resolve: resolve)
    }
    
    public static func unregister(key: Key) {
        let _ = withWriteLock { dependencies.removeValue(forKey: key) }
    }
    
    public static func unregister<D, C: Hashable, N: Hashable>(type: D.Type, container: C, name: N) {
        let key = Key(type: D.self, container: container, name: name)
        unregister(key: key)
    }
    
    public static func unregister<D, C: Hashable>(type: D.Type, container: C) {
        let key = Key(type: D.self, container: container, name: Name.default)
        unregister(key: key)
    }
    
    public static func unregister<D, N: Hashable>(type: D.Type, name: N) {
        let key = Key(type: D.self, container: Container.default, name: name)
        unregister(key: key)
    }
    
    public static func unregister<D>(type: D.Type) {
        
    }
    
    public static func container<C: Hashable>(name: C, lifecycle: Lifecycle = .notCached) -> Guise {
