diff --git a/src/main/haxework/provider/Provider.hx b/src/main/haxework/provider/Provider.hx index dae035f..6b73c3d 100755 --- a/src/main/haxework/provider/Provider.hx +++ b/src/main/haxework/provider/Provider.hx @@ -1,10 +1,24 @@ package haxework.provider; +abstract KeyType(String) { + + public function new(value:String) { + this = value; + } + + @:from public static inline function fromClass(value:Class):KeyType { + return new KeyType(Type.getClassName(value)); + } + + @:from public static inline function fromEnum(value:Enum):KeyType { + return new KeyType(Type.getEnumName(value)); + } +} class Provider { - private static function key(i:Class, ?type:Dynamic):String { - var result = Type.getClassName(i); + private static function key(i:KeyType, ?type:Dynamic):String { + var result:String = Std.string(i); if (type != null) result += ':${Std.string(type)}'; return result; } @@ -13,18 +27,18 @@ class Provider { private static var args:Map> = new Map(); private static var instances:Map = new Map(); - public static function setFactory(i:Class, clazz:Class, ?type:Dynamic, ?args:Array):Void { + public static function setFactory(i:KeyType, clazz:Class, ?type:Dynamic, ?args:Array):Void { var key = key(i, type); factories.set(key, clazz); if (args != null) Provider.args.set(key, args); } - public static function set(i:Class, instance:T, ?type:Dynamic):Void { + public static function set(i:KeyType, instance:T, ?type:Dynamic):Void { var key = key(i, type); instances.set(key, instance); } - public static function get(i:Class, ?type:Dynamic):T { + public static function get(i:KeyType, ?type:Dynamic):T { var key = key(i, type); if (instances.exists(key)) { return instances.get(key);