DI и фабрики03 / 13

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
ЭкземплярКонтейнер сохраняет сервис для следующих запросов

Источники ↗

Block Puzzle · scene.di.ts↗Фабрика игрового сервиса и список сервисов сцены.