service.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import {isServiceContainer} from './utils/index.js';
  2. import {ServiceContainer} from './service-container.js';
  3. /**
  4. * Service class name.
  5. *
  6. * @type {string}
  7. */
  8. export const SERVICE_CLASS_NAME = 'Service';
  9. /**
  10. * Service.
  11. */
  12. export class Service {
  13. /**
  14. * Kinds.
  15. *
  16. * @type {string[]}
  17. */
  18. static kinds = [SERVICE_CLASS_NAME];
  19. /**
  20. * Container.
  21. *
  22. * @type {ServiceContainer}
  23. */
  24. container;
  25. /**
  26. * Constructor.
  27. *
  28. * @param {ServiceContainer|undefined} container
  29. */
  30. constructor(container = undefined) {
  31. this.container = isServiceContainer(container)
  32. ? container
  33. : new ServiceContainer();
  34. }
  35. /**
  36. * Получить существующий или новый экземпляр.
  37. *
  38. * @param {*} ctor
  39. * @param {*} args
  40. * @return {*}
  41. */
  42. getService(ctor, ...args) {
  43. return this.container.get(ctor, ...args);
  44. }
  45. /**
  46. * Проверка существования конструктора в контейнере.
  47. *
  48. * @param {*} ctor
  49. * @return {boolean}
  50. */
  51. hasService(ctor) {
  52. return this.container.has(ctor);
  53. }
  54. /**
  55. * Добавить конструктор в контейнер.
  56. *
  57. * @param {*} ctor
  58. * @param {*} args
  59. * @return {this}
  60. */
  61. addService(ctor, ...args) {
  62. this.container.add(ctor, ...args);
  63. return this;
  64. }
  65. /**
  66. * Добавить конструктор и создать экземпляр.
  67. *
  68. * @param {*} ctor
  69. * @param {*} args
  70. * @return {this}
  71. */
  72. useService(ctor, ...args) {
  73. this.container.use(ctor, ...args);
  74. return this;
  75. }
  76. /**
  77. * Добавить конструктор и связанный экземпляр.
  78. *
  79. * @param {*} ctor
  80. * @param {*} service
  81. * @return {this}
  82. */
  83. setService(ctor, service) {
  84. this.container.set(ctor, service);
  85. return this;
  86. }
  87. }