Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 4 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,6 @@
- [Быстрый старт](#быстрый-старт)
- [Переменные окружения](#переменные-окружения)
- [Основные компоненты библиотеки](#основные-компоненты-библиотеки)
- [Рекомендации](#рекомендации)
- [Пример использования](#пример-использования)
- [Описание каталога `examples`](#описание-каталога-examples)
- [Сворачивание сервисов в монолитное приложение](#сворачивание-сервисов-в-монолитное-приложение)
- [Инверсия зависимостей и DI-контейнер](#инверсия-зависимостей-и-di-контейнер)

Expand Down Expand Up @@ -275,19 +272,19 @@ npm i

- `getListener` 一 метод получения объекта `EventEmitter` для подписки на события сервиса.

3. Класс `Container`. Реализует DI-контейнре. Сам класс не доступен для импорта, а доступен только его экземпляр, что позволяет реализовать шаблон Singlton. В микросервисном варианте контейнер один на сервис. В монолитном варианте использования контейнер один на все приложение. За счет использования объектов Symbol в качестве ключей для привязки зависимостей исключены коллизии при привязках зависимостей в разных частях приложения через один контейнер. Для привязки зависимости к ключу необходимо указать тип зависимости. Это нужно чтобы библиотека могла корректно создать экземпляр зависимости. Всего существуют 3 вида зависимостей:
3. Класс `Container`. Реализует DI-контейнре. Сам класс не доступен для импорта, а доступен только его экземпляр, что позволяет реализовать шаблон Singleton. В микросервисном варианте контейнер один на сервис. В монолитном варианте использования контейнер один на все приложение. За счет использования объектов Symbol в качестве ключей для привязки зависимостей исключены коллизии при привязках зависимостей в разных частях приложения через один контейнер. Для привязки зависимости к ключу необходимо указать тип зависимости. Это нужно чтобы библиотека могла корректно создать экземпляр зависимости. Всего существуют 3 вида зависимостей:

- `service` 一 сервис как зависимости.
- `adapter` 一 класс с набором синхронных или асинхронных методов. Например репозиторий или фасад от стороннего API. Этот тип зависимости можно настроить с помощью необязательного объекта настроек. У опций адаптера могут быть следующие настройки:
- `singlton` 一 Булевое значение. Если передать `true` то адаптер станет singlton'ом. Объект будет создан один раз и дальше будет всегда использоваться один экземпляр.
- `singleton` 一 Булевое значение. Если передать `true` то адаптер станет singleton'ом. Объект будет создан один раз и дальше будет всегда использоваться один экземпляр.
- `init` 一 Булевое значение. Для того что бы использовать этот флаг адаптер должен реализовывать следующий интерфейс
```js
{
init: () => Promise<any>;
close: () => Promise<any>;
}
```
Если адаптер реализует требуемые методы и при передачи флага `init` при привязки адаптера адаптер можно будет инициализировать через контейнер использую метод контейнера `init`. Если к контейнеру было привязано несколько адаптеров, которые необходимо инициализировать, то после вызова метода контейнера `init` все адаптеры будут инициализированны последовательно. Метод инициализации вернет массив инициализированных экземпляров адаптеров. Каждый адаптер с настройкой `init` также становится singlton'ом.
Если адаптер реализует требуемые методы и при передачи флага `init` при привязки адаптера адаптер можно будет инициализировать через контейнер использую метод контейнера `init`. Если к контейнеру было привязано несколько адаптеров, которые необходимо инициализировать, то после вызова метода контейнера `init` все адаптеры будут инициализированны последовательно. Метод инициализации вернет массив инициализированных экземпляров адаптеров. Каждый адаптер с настройкой `init` также становится singleton'ом.
- `constant`一 обычный объект. Например, объект с конфигурацией.
- Альтернативный синтаксис привязки с учетом вышеизложенной информации
```js
Expand All @@ -296,7 +293,7 @@ npm i
// константа
container.symbol(key2).to.Constant({ obj: 'value' });
// Синглтон
container.symbol(key).to.Singlton(mySingleton);
container.symbol(key).to.Singleton(mySingleton);
// Сервис с автоинициазлзацией
container.symbol(key).to.Initializable(InitializableService);
// Сервис
Expand Down
Loading