DriverManagerSystem
Namespace: Vortex.Unity.DriverManagerSystem
Сборка: ru.vortex.drivermanager
Назначение
Централизованная конфигурация и валидация соответствия между системами ядра (AudioController, Database, SaveController) и их платформозависимыми драйверами (AudioDriver, DatabaseDriver, SaveSystemDriver).
Возможности:
- Таблица соответствий «Система → Драйвер» в одном ScriptableObject-ассете
- Автообнаружение всех
ISystemControllerи совместимых драйверов через рефлексию - Кодогенерация типобезопасного белого списка (
DriversGenericList.cs) - Валидация полноты конфигурации перед сохранением
- Проверка при загрузке проекта: предупреждение при отсутствии или рассинхроне
DriversGenericList.cs
Вне ответственности:
- Создание и регистрация драйверов (реализуется в конкретных системах)
- Runtime-инициализация систем (выполняется через
Loader)
Зависимости
| Зависимость | Назначение |
|---|---|
Vortex.Core.System |
ISystemController, ISystemDriver — интерфейсы систем и драйверов |
Vortex.Unity.CoreAssetsSystem |
ICoreAsset — маркер автосоздаваемого ассета |
Vortex.Unity.EditorTools |
[LabelText] — атрибуты Inspector |
Vortex.Unity.Extensions |
MenuConfigSearchController — навигация к ассету |
| Odin Inspector | [Button], [InfoBox], [ValueDropdown], [ListDrawerSettings] |
Архитектура
DriverManagerSystem/
├── Base/
│ ├── DriverConfig.cs # ScriptableObject — таблица соответствий
│ └── DriverRecord.cs # Строка таблицы: система → драйвер
├── Editor/
│ └── MenuController.cs # Меню: Tools/Vortex/Configs/Drivers Config
└── (generated) DriversGenericList.cs # Автогенерируемый белый список
DriverConfig
ScriptableObject (ICoreAsset), хранит массив DriverRecord[]. Располагается в Assets/Resources/, создаётся автоматически при первом запуске через Vortex/Debug/Check Core Assets.
Редакторные операции:
- Reload — сканирует сборки, находит все
ISystemController, обновляет таблицу (сохраняя существующие привязки) - Save Config — валидирует полноту назначений и генерирует
DriversGenericList.cs
При загрузке проекта (InitializeOnLoadMethod) проверяет наличие и актуальность DriversGenericList.cs.
DriverRecord
Сериализуемая строка таблицы. Хранит AssemblyQualifiedName системы и выбранного драйвера. В Inspector отображает:
- Имя системы как label
- Dropdown совместимых драйверов (фильтрация по интерфейсу через
GetDriverType()) - Опция
[Switched Off]для отключения системы
Определение совместимости: рефлексия вызывает статический метод GetDriverType() у системы, получает тип интерфейса драйвера, затем ищет все конкретные реализации этого интерфейса в сборках ru.vortex.*.
DriversGenericList.cs (автогенерируемый)
Статический класс в namespace Vortex.Core.System. Содержит Dictionary<string, string> WhiteList — маппинг AssemblyQualifiedName системы на AssemblyQualifiedName разрешённого драйвера.
Используется в SystemController<T, TD>.SetDriver() для runtime-валидации: подключить можно только тот драйвер, который указан в белом списке.
Контракт
Вход
- Набор систем, реализующих
ISystemController - Набор драйверов, реализующих соответствующие
ISystemDriver-интерфейсы
Выход
DriversGenericList.cs— compile-time белый список для runtime-валидации
Гарантии
- Невозможно сохранить конфигурацию с пустыми назначениями
- Невозможно подключить несовместимый драйвер в runtime
- Раннее выявление ошибок: лог при загрузке проекта, если конфигурация рассинхронизирована
Использование
- Открыть
DriverConfigчерез меню Tools/Vortex/Configs/Drivers Config - Нажать Reload для обнаружения всех систем
- Назначить драйвер каждой системе через dropdown
- Нажать Save Config — сгенерируется
DriversGenericList.cs - При старте приложения драйверы подключаются через
SystemController.SetDriver()с валидацией по белому списку
// Создание системы
public class MyService : SystemController<MyService, IMyDriver> { ... }
// Создание драйвера
public class MyServiceDriver : IMyDriver { ... }
// В DriverConfig: Reload → выбрать MyServiceDriver → Save Config
// Runtime (внутри драйвера):
MyService.SetDriver(this); // валидация по DriversGenericList.WhiteList
Граничные случаи
| Ситуация | Поведение |
|---|---|
| Добавлена новая система | Не появится в таблице до нажатия Reload |
| Не все драйверы назначены | Save Config отклоняется с LogError |
DriversGenericList.cs удалён |
Предупреждение при загрузке проекта |
DriversGenericList.cs не соответствует DriverConfig |
Предупреждение при загрузке проекта |
SetDriver() с неразрешённым драйвером |
Ошибка валидации в runtime |
Флаг onlyInVortexSearch отключён |
Поиск драйверов во всех сборках проекта |
Система выбрана как [Switched Off] |
Драйвер не назначается, система не инициализируется |