[provider] fix build method
This commit is contained in:
@@ -4,6 +4,8 @@ import haxe.ds.ObjectMap;
|
|||||||
|
|
||||||
class Provider {
|
class Provider {
|
||||||
|
|
||||||
|
private static var TAG(default, never):String = Type.getClassName(Provider).split('.').pop();
|
||||||
|
|
||||||
//private static var factories:ObjectMap<Dynamic, Class<Dynamic>> = new ObjectMap<Dynamic, Class<Dynamic>>();
|
//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:ObjectMap<Dynamic, Class<Dynamic>> = cast [
|
||||||
#if (!neko)
|
#if (!neko)
|
||||||
@@ -15,12 +17,15 @@ class Provider {
|
|||||||
private static var instances:ObjectMap<Dynamic, Dynamic> = new ObjectMap<Dynamic, Dynamic>();
|
private static var instances:ObjectMap<Dynamic, Dynamic> = new ObjectMap<Dynamic, Dynamic>();
|
||||||
|
|
||||||
public static function setFactory<T>(i:Class<T>, clazz:Class<T>, ?type:Dynamic, ?args:Array<Dynamic>):Void {
|
public static function setFactory<T>(i:Class<T>, clazz:Class<T>, ?type:Dynamic, ?args:Array<Dynamic>):Void {
|
||||||
factories.set(type == null ? i : i + type, clazz);
|
var key:Dynamic = (type == null) ? i : i + type;
|
||||||
|
//L.d(TAG, 'setFactory(${key}, ${clazz})');
|
||||||
|
factories.set(key, clazz);
|
||||||
if (args != null) Provider.args.set(type == null ? i : i + type, args);
|
if (args != null) Provider.args.set(type == null ? i : i + type, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function set<T>(i:Class<T>, instance:T, ?type:Dynamic):Void {
|
public static function set<T>(i:Class<T>, instance:T, ?type:Dynamic):Void {
|
||||||
instances.set(type == null ? i : i + type, instance);
|
var key:Dynamic = (type == null) ? i : i + type;
|
||||||
|
instances.set(key, instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function get<T>(i:Class<T>, ?type:Dynamic):T {
|
public static function get<T>(i:Class<T>, ?type:Dynamic):T {
|
||||||
@@ -37,12 +42,13 @@ class Provider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static function build<T>(i:Class<T>, ?type:Dynamic):T {
|
public static function build<T>(i:Class<T>, ?type:Dynamic):T {
|
||||||
var key:Dynamic = (type == null) ? i : type;
|
var key:Dynamic = (type == null) ? i : i + type;
|
||||||
|
//L.d(TAG, 'build(${key})');
|
||||||
if (factories.exists(key)) {
|
if (factories.exists(key)) {
|
||||||
var instance:T = Type.createInstance(factories.get(key), args.exists(key) ? args.get(key) : []);
|
var instance:T = Type.createInstance(factories.get(key), args.exists(key) ? args.get(key) : []);
|
||||||
return instance;
|
return instance;
|
||||||
} else {
|
} else {
|
||||||
throw "Factory for\"" + i + "\" not found";
|
throw "Factory for\"" + key + "\" not found";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user