Skip to content

Instantly share code, notes, and snippets.

@statianzo
Created June 22, 2015 17:00
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save statianzo/0f33c80ba7d9e385de59 to your computer and use it in GitHub Desktop.
Save statianzo/0f33c80ba7d9e385de59 to your computer and use it in GitHub Desktop.
Simple DI
var deps = {};
function register(name, value) {
deps[name] = value;
}
function inject(fn) {
var wants = fn.wants || [];
var resolved = wants.map(resolve);
return fn.apply(null, resolved);
}
function resolve(key) {
var dep = deps[key];
var injected = inject(dep);
return injected;
}
register('name', function() {
return 'joe';
});
register('greeter', (function() {
function greeter(name) {
return function() {
console.log('yo ' + name);
};
}
greeter.wants = ['name'];
return greeter;
}()));
function myCoolThing(greeter) {
return function() {
console.log('before');
greeter();
console.log('later');
};
}
myCoolThing.wants = ['greeter'];
var injected = inject(myCoolThing);
injected();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment