Skip to content

Instantly share code, notes, and snippets.

@francescoagati
Created January 14, 2012 15:53
Show Gist options
  • Save francescoagati/1611853 to your computer and use it in GitHub Desktop.
Save francescoagati/1611853 to your computer and use it in GitHub Desktop.
haxe dependency injection style syringe pimple
class Main {
public static function getInjector() {
var inject=new Injector();
inject.service("logger",function(context) {
trace(context);
return 9999;
});
return inject;
};
public static function main() {
var inject:Syringo=getInjector();
trace(inject.get("logger"));
trace(inject.get("logger"));
trace(inject.get("logger"));
trace(inject.get("logger"));
trace(inject.get("logger"));
}
}
typedef Service={
generator:Dynamic,
cached:Bool,
object:Dynamic
};
class Syringo {
public var services:Hash<Service>;
public function new() {
services=new Hash();
}
public function service(name:String,generator:Dynamic) {
trace("set");
services.set(name,{
generator:generator,
cached:false,
object:Dynamic
});
}
public function get(name:String):Dynamic {
var service:Service=services.get(name);
if (service.cached==false) {
service.object=service.generator(this);
service.cached=true;
service.object;
};
return service.object;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment