项目作者: petrgrishin

项目描述 :
JS. Simple JS dependency injection container
高级语言: JavaScript
项目地址: git://github.com/petrgrishin/di.git
创建时间: 2015-04-08T22:53:13Z
项目社区:https://github.com/petrgrishin/di

开源协议:

下载


di

Simple JS dependency injection container

Defining services

  1. container.set('storage', function(container) {
  2. return new Storage;
  3. });
  4. container.set('cache', function(container) {
  5. return new Cache(container.get('storage'));
  6. });

Defining factory services

  1. container.set('cache', container.factory(function(container) {
  2. return new Cache(container.get('storage'));
  3. }));

Modifying services after definition

  1. container.extend('cache', function(cache, container) {
  2. cache.setTtl(100);
  3. return cache;
  4. });

Defining you factory*

  1. container.protect('cache', function(container) {
  2. return new Cache(container.get('storage'));
  3. });

Sample application

  1. var app = new Container;
  2. app.set('app', function(container) {
  3. return {
  4. run: function() {
  5. console.log('App start');
  6. container.get('table').render();
  7. container.get('newInstance').render();
  8. container.get('newInstance').render();
  9. container.get('newInstance').render();
  10. container.get('myFactory').render();
  11. container.get('myFactory').render();
  12. container.get('myFactory').render();
  13. console.log('App end');
  14. }
  15. };
  16. });
  17. app.set('table', function(container) {
  18. var row = container.get('row');
  19. return {
  20. render: function () {
  21. row.render(1);
  22. row.render(2);
  23. row.render(3);
  24. },
  25. setRow: function(value) {
  26. row = value;
  27. }
  28. };
  29. });
  30. app.extend('table', function(table, container) {
  31. var row2 = container.get('row2');
  32. table.setRow(row2);
  33. return table;
  34. });
  35. app.set('newInstance', app.factory(function(container) {
  36. var random = Math.random();
  37. return {
  38. render: function () {
  39. console.log('newInstance -> ' + random);
  40. }
  41. };
  42. }));
  43. app.protect('myFactory', function (container) {
  44. var random = Math.random();
  45. return {
  46. render: function () {
  47. console.log('instance from my myFactory -> ' + random);
  48. }
  49. };
  50. });
  51. app.set('row', function(container) {
  52. var random = Math.random();
  53. return {
  54. render: function (value) {
  55. console.log('render row: ' + value + ' -> ' + random);
  56. }
  57. };
  58. });
  59. app.set('row2', function(container) {
  60. var random = Math.random();
  61. return {
  62. render: function (value) {
  63. console.log('render row2: ' + value + ' -> ' + random);
  64. }
  65. };
  66. });
  67. app.get('app').run();