From 971fce09042439cd71dd4d2610cefa9f32cd3e52 Mon Sep 17 00:00:00 2001 From: shmyga Date: Wed, 13 Nov 2013 16:12:53 +0400 Subject: [PATCH] added provider --- haxework/provider/Provider.hx | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100755 haxework/provider/Provider.hx diff --git a/haxework/provider/Provider.hx b/haxework/provider/Provider.hx new file mode 100755 index 0000000..92905ca --- /dev/null +++ b/haxework/provider/Provider.hx @@ -0,0 +1,31 @@ +package haxework.provider; + +import haxe.ds.ObjectMap; +import flash.errors.Error; + +class Provider { + + private static var factories:ObjectMap> = new ObjectMap>(); + private static var instances:ObjectMap = new ObjectMap(); + + public static function setFactory(i:Class, clazz:Class, ?type:Dynamic):Void { + factories.set(type == null ? i : type, clazz); + } + + public static function set(i:Class, instance:T, ?type:Dynamic):Void { + instances.set(type == null ? i : type, instance); + } + + public static function get(i:Class, ?type:Dynamic):T { + var key:Dynamic = (type == null) ? i : type; + if (instances.exists(key)) { + return instances.get(key); + } else if (factories.exists(key)) { + var instance:T = Type.createInstance(factories.get(key), []); + instances.set(key, instance); + return instance; + } else { + throw new Error("Factory for\"" + i + "\" not found"); + } + } +} \ No newline at end of file