service-container.d.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import {Constructor} from './types.js';
  2. /**
  3. * Find service predicate.
  4. */
  5. export type FindServicePredicate<T extends object> = (
  6. ctor: Constructor<T>,
  7. container: ServiceContainer,
  8. ) => boolean;
  9. /**
  10. * Service container.
  11. */
  12. export declare class ServiceContainer {
  13. /**
  14. * Constructor.
  15. *
  16. * @param parent
  17. */
  18. constructor(parent?: ServiceContainer);
  19. /**
  20. * Получить родительский сервис-контейнер или выбросить ошибку.
  21. */
  22. getParent(): ServiceContainer;
  23. /**
  24. * Проверить наличие родительского сервис-контейнера.
  25. */
  26. hasParent(): boolean;
  27. /**
  28. * Получить существующий или новый экземпляр.
  29. *
  30. * @param ctor
  31. * @param args
  32. */
  33. get<T extends object>(
  34. ctor: Constructor<T>,
  35. ...args: any[],
  36. ): T;
  37. /**
  38. * Получить существующий или новый экземпляр,
  39. * только если конструктор зарегистрирован.
  40. *
  41. * @param ctor
  42. * @param args
  43. */
  44. getRegistered<T extends object>(
  45. ctor: Constructor<T>,
  46. ...args: any[],
  47. ): T;
  48. /**
  49. * Проверить существование конструктора в контейнере.
  50. *
  51. * @param ctor
  52. */
  53. has<T extends object>(ctor: Constructor<T>): boolean;
  54. /**
  55. * Добавить конструктор в контейнер.
  56. *
  57. * @param ctor
  58. * @param args
  59. */
  60. add<T extends object>(
  61. ctor: Constructor<T>,
  62. ...args: any[],
  63. ): this;
  64. /**
  65. * Добавить конструктор и создать экземпляр.
  66. *
  67. * @param ctor
  68. * @param args
  69. */
  70. use<T extends object>(
  71. ctor: Constructor<T>,
  72. ...args: any[],
  73. ): this;
  74. /**
  75. * Добавить конструктор и связанный экземпляр.
  76. *
  77. * @param ctor
  78. * @param service
  79. */
  80. set<T extends object>(
  81. ctor: Constructor<T>,
  82. service: T,
  83. ): this;
  84. /**
  85. * Найти сервис удовлетворяющий условию.
  86. *
  87. * @param predicate
  88. * @param noParent
  89. */
  90. find<T extends object>(
  91. predicate: FindServicePredicate<T>,
  92. noParent?: boolean,
  93. ): T | undefined;
  94. }