Внедрили контейнер, но Resolve вызывают по всему коду
Проект перевели на контейнер зависимостей. Но в геймплейных классах это выглядит так:
public class BossFight : MonoBehaviour
{
void StartFight()
{
var audio = Container.Resolve<IAudioService>();
var save = Container.Resolve<ISaveService>();
...
}
}
Контейнер один на проект, доступен статически. Команда считает, что раз зависимости описаны интерфейсами, задача решена. В чём здесь проблема?
- Разницы нет: получение из контейнера и внедрение через конструктор равнозначны, это вопрос вкуса
- Контейнер превращён в глобальный сервис-локатор: зависимости класса не видны снаружи и их нельзя подменить при сборке объекта
- Такое получение зависимостей опасно только производительностью: контейнер каждый раз ищет тип рефлексией, и в геймплее это видно на профайлере
- Контейнер вообще не нужен в геймплейных классах: сервисы правильнее находить поиском по сцене, тогда сборка объекта не зависит от внешнего кода
