DI-фабрика игрового сервиса
Передадим настройки игры и сервис прогресса в конструктор.
При входе в сцену SDK запрашивает сервисы из registerServices. Для Gameplay контейнер вызывает фабрику (provider.useFactory(this)). Она передаёт в конструктор настройки поля, фигур, очков и сервис прогресса. scene.di.ts
registrar.singletonFactory(BlockPuzzleServices.Gameplay, (container) => {
const configs = container.get<ConfigStore>(SystemServices.ConfigStore);
return new BlockPuzzleGameplayService(
configs.get(
BlockPuzzleConfigEntries.Board.fileId,
BlockPuzzleConfigEntries.Board.decoder,
),
configs.get(
BlockPuzzleConfigEntries.Shapes.fileId,
BlockPuzzleConfigEntries.Shapes.decoder,
),
configs.get(
BlockPuzzleConfigEntries.Scoring.fileId,
BlockPuzzleConfigEntries.Scoring.decoder,
),
container.get<BlockPuzzlePlayerProgressService>(
CommonServices.Progress,
),
);
});
ЗапросКонтейнер получает токен Gameplay
Вызов фабрикиФабрика передаёт зависимости в new BlockPuzzleGameplayService
ЭкземплярКонтейнер сохраняет сервис для следующих запросов