Вступить в клуб →
средняявопросАрхитектура игрового кода

Внедрили контейнер, но Resolve вызывают по всему коду

Проект перевели на контейнер зависимостей. Но в геймплейных классах это выглядит так:

public class BossFight : MonoBehaviour
{
    void StartFight()
    {
        var audio = Container.Resolve<IAudioService>();
        var save  = Container.Resolve<ISaveService>();
        ...
    }
}

Контейнер один на проект, доступен статически. Команда считает, что раз зависимости описаны интерфейсами, задача решена. В чём здесь проблема?

  • Разницы нет: получение из контейнера и внедрение через конструктор равнозначны, это вопрос вкуса
  • Контейнер превращён в глобальный сервис-локатор: зависимости класса не видны снаружи и их нельзя подменить при сборке объекта
  • Такое получение зависимостей опасно только производительностью: контейнер каждый раз ищет тип рефлексией, и в геймплее это видно на профайлере
  • Контейнер вообще не нужен в геймплейных классах: сервисы правильнее находить поиском по сцене, тогда сборка объекта не зависит от внешнего кода

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела