Advertisement
Guest User

Untitled

a guest
Apr 20th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.58 KB | None | 0 0
  1. var Injector = (function () {
  2. var container = [], registry = [];
  3. function getInjectableByName(name) {
  4. return container
  5. .filter(function(injectable){ return Object.keys(injectable)[0] === name; })
  6. .map(function(injectable){ return injectable[name]; })[0];
  7. }
  8. return {
  9. apply: function () {
  10. for( var i in registry) {
  11. var args = registry[i].args, observer = registry[i].observer;
  12. for (var j in args) {
  13. var arg = args[j], name = Object.keys(arg)[0];
  14. observer[name] = getInjectableByName(arg[name]);
  15. }
  16. }
  17. },
  18. register: function (name, obj) {
  19. if (container.filter(function (item) {return !!item[name];}).length > 0) {
  20. throw new Error('Can\'t register more than one ' + name);
  21. }
  22. var injectable = {};
  23. injectable[name] = obj;
  24. container.push(injectable);
  25. this.apply();
  26. },
  27. inject: function () {
  28. var observer, _args = arguments, args = Object.keys(_args)
  29. .filter(function (key) {return parseInt(key) >= 0;})
  30. .map(function (key) {return _args[key];});
  31. observer = args.pop();
  32. registry.push({args: args, observer: observer});
  33. this.apply();
  34. }
  35. };
  36. })();
  37.  
  38. Injector.register('Company', {name:'XXXX'});
  39.  
  40. function Person() {
  41. this.company = null;
  42.  
  43. Injector.inject({'company':'Company'}, this);
  44. }
  45.  
  46. var person = new Person();
  47. console.log(person.company);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement