Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var Injector = (function () {
- var container = [], registry = [];
- function getInjectableByName(name) {
- return container
- .filter(function(injectable){ return Object.keys(injectable)[0] === name; })
- .map(function(injectable){ return injectable[name]; })[0];
- }
- return {
- apply: function () {
- for( var i in registry) {
- var args = registry[i].args, observer = registry[i].observer;
- for (var j in args) {
- var arg = args[j], name = Object.keys(arg)[0];
- observer[name] = getInjectableByName(arg[name]);
- }
- }
- },
- register: function (name, obj) {
- if (container.filter(function (item) {return !!item[name];}).length > 0) {
- throw new Error('Can\'t register more than one ' + name);
- }
- var injectable = {};
- injectable[name] = obj;
- container.push(injectable);
- this.apply();
- },
- inject: function () {
- var observer, _args = arguments, args = Object.keys(_args)
- .filter(function (key) {return parseInt(key) >= 0;})
- .map(function (key) {return _args[key];});
- observer = args.pop();
- registry.push({args: args, observer: observer});
- this.apply();
- }
- };
- })();
- Injector.register('Company', {name:'XXXX'});
- function Person() {
- this.company = null;
- Injector.inject({'company':'Company'}, this);
- }
- var person = new Person();
- console.log(person.company);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement