Провайдеры и время жизни04 / 13

DI-провайдеры и время жизни

Укажем, когда создавать новый объект, а когда возвращать готовый.

Для каждого такого объекта добавляем в DI-контейнер правило — провайдер. В нём указываем токен и способ получения объекта: вернуть готовое значение, создать объект из класса или вызвать фабрику. При регистрации также выбираем, сохранять объект для следующих запросов или создавать каждый раз новый.

Например, сервис прогресса может быть общим для всей игры. А если на экране два счётчика, каждому нужен свой компонент, чтобы управлять своим текстом.

singletonValueВозвращает готовое значение
singletonClassСоздаёт объект из класса один раз
singletonFactoryВызывает фабрику один раз
transientClassСоздаёт объект из класса при каждом запросе
Singleton сохраняет объект, transient создаёт новый.

Сокращённая регистрация компонента в di.providers.ts:

group.add('BlockPuzzleScoreComponent', BlockPuzzleScoreComponent);

Компонент регистрируем в ComponentsGroup под тем же именем, что и type в JSON. Узел — это элемент экрана, например текст счётчика. Если подключить этот компонент к двум текстовым узлам, SDK создаст два отдельных объекта компонента — по одному для каждого текста.

При глобальной регистрации singleton остаётся общим для игры. При регистрации в контейнере сцены он создаётся заново при каждом входе.

Источники ↗

Block Puzzle · di.providers.ts↗Регистрация четырёх категорий в игре.