# TASK-0001: Composition Root и зависимости ## Статус Ready ## Цель Настроить корневую точку композиции проекта через VContainer так, чтобы orchestration-логика жила в plain C# классах, а MonoBehaviour использовались только как View-компоненты сцены. ## Что сделать - Создать `GameLifetimeScope`. - Зарегистрировать сервисы и контроллеры через VContainer как managed dependencies. - Зарегистрировать `BootstrapEntryPoint` как entry point приложения. - Зарегистрировать `BootStatesController` как `IStatesController` и при необходимости как self. - Зарегистрировать `SplashState`, `LoadState`, `MenuState`. - Зарегистрировать scene View через `RegisterComponent(...)`. - Зарегистрировать settings asset через `[SerializeField]` и `RegisterInstance(...)`. ## Технические требования - Использовать VContainer. - Сервисы регистрировать через `builder.Register(Lifetime.Singleton).As()`. - Не использовать `RegisterInstance(...)` для сервисов и controller-объектов. - `RegisterInstance(...)` использовать только для settings/config assets. - Не использовать `FindObjectOfType`, `Singleton.Instance` и `static`-хранилища состояния. - MonoBehaviour не должны содержать orchestration-логику boot flow. ## Критерии готовности - В сцене есть один `GameLifetimeScope`. - Все boot flow зависимости собираются через VContainer. - View-компоненты подключаются через ссылки из сцены, а не через поиск объектов. - Entry point запускается контейнером. - Сервисы и state machine не создаются вручную через `new` внутри MonoBehaviour. ## Заметки Scene View допустимо регистрировать как компоненты, потому что они физически живут в сцене. Settings asset допустимо регистрировать через `RegisterInstance(...)`, потому что это данные, а не сервис с жизненным циклом.