[provider] ObjectMap -> StringMap
This commit is contained in:
@@ -1,35 +1,36 @@
|
||||
package haxework.provider;
|
||||
|
||||
import haxe.ds.ObjectMap;
|
||||
|
||||
class Provider {
|
||||
|
||||
private static var TAG(default, never):String = Type.getClassName(Provider).split('.').pop();
|
||||
private static function key<T>(i:Class<T>, ?type:Dynamic):String {
|
||||
var result = Type.getClassName(i);
|
||||
if (type != null) result += ':${type}';
|
||||
return result;
|
||||
}
|
||||
|
||||
//private static var factories:ObjectMap<Dynamic, Class<Dynamic>> = new ObjectMap<Dynamic, Class<Dynamic>>();
|
||||
private static var factories:ObjectMap<Dynamic, Class<Dynamic>> = cast [
|
||||
//private static var factories:Map<String, Class<Dynamic>> = new Map();
|
||||
private static var factories:Map<String, Class<Dynamic>> = cast [
|
||||
#if (!neko)
|
||||
haxework.net.manage.LoaderManager => haxework.net.manage.ILoaderManager
|
||||
key(haxework.net.manage.LoaderManager) => haxework.net.manage.ILoaderManager
|
||||
#end
|
||||
];
|
||||
|
||||
private static var args:ObjectMap<Dynamic, Array<Dynamic>> = new ObjectMap<Dynamic, Array<Dynamic>>();
|
||||
private static var instances:ObjectMap<Dynamic, Dynamic> = new ObjectMap<Dynamic, Dynamic>();
|
||||
private static var args:Map<String, Array<Dynamic>> = new Map();
|
||||
private static var instances:Map<String, Dynamic> = new Map();
|
||||
|
||||
public static function setFactory<T>(i:Class<T>, clazz:Class<T>, ?type:Dynamic, ?args:Array<Dynamic>):Void {
|
||||
var key:Dynamic = (type == null) ? i : i + type;
|
||||
//L.d(TAG, 'setFactory(${key}, ${clazz})');
|
||||
var key = key(i, type);
|
||||
factories.set(key, clazz);
|
||||
if (args != null) Provider.args.set(type == null ? i : i + type, args);
|
||||
if (args != null) Provider.args.set(key, args);
|
||||
}
|
||||
|
||||
public static function set<T>(i:Class<T>, instance:T, ?type:Dynamic):Void {
|
||||
var key:Dynamic = (type == null) ? i : i + type;
|
||||
var key = key(i, type);
|
||||
instances.set(key, instance);
|
||||
}
|
||||
|
||||
public static function get<T>(i:Class<T>, ?type:Dynamic):T {
|
||||
var key:Dynamic = (type == null) ? i : i + type;
|
||||
var key = key(i, type);
|
||||
if (instances.exists(key)) {
|
||||
return instances.get(key);
|
||||
} else if (factories.exists(key)) {
|
||||
@@ -37,18 +38,17 @@ class Provider {
|
||||
instances.set(key, instance);
|
||||
return instance;
|
||||
} else {
|
||||
throw "Factory for\" " + i + "\" not found";
|
||||
throw 'Factory for "${key}" not found';
|
||||
}
|
||||
}
|
||||
|
||||
public static function build<T>(i:Class<T>, ?type:Dynamic):T {
|
||||
var key:Dynamic = (type == null) ? i : i + type;
|
||||
//L.d(TAG, 'build(${key})');
|
||||
var key = key(i, type);
|
||||
if (factories.exists(key)) {
|
||||
var instance:T = Type.createInstance(factories.get(key), args.exists(key) ? args.get(key) : []);
|
||||
return instance;
|
||||
} else {
|
||||
throw "Factory for\"" + key + "\" not found";
|
||||
throw 'Factory for "${key}" not found';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user