| 1 | # OutWit.Common.Settings — заметки по репозиторию |
| 2 | |
| 3 | Просмотр кода: [Settings](https://github.com/dmitrat/Common/tree/main/Settings), [OutWit.Common.Settings](https://github.com/dmitrat/Common/tree/main/Settings/OutWit.Common.Settings), [Json](https://github.com/dmitrat/Common/tree/main/Settings/Json/OutWit.Common.Settings.Json). |
| 4 | |
| 5 | ## Архитектура |
| 6 | |
| 7 | - **Контейнеры** — классы, наследующие `SettingsContainer(ISettingsManager)`. Свойства перехватываются (AOP) и читают/пишут через менеджер. |
| 8 | - **Хранение** — по **группам** и **записям** (`SettingsEntry`: Group, Key, Value (string), ValueKind, Tag). Провайдер: `Read(group)`, `Write(group, entries)`. |
| 9 | - **Регистрация** — DI: `services.AddSettings(s => s.UseJson().RegisterContainer<IAppSettings, ApplicationSettings>())`. После `Build()` — `Merge()` и `Load()`. |
| 10 | |
| 11 | ## Json-провайдер |
| 12 | |
| 13 | - `UseJson()` — файл по умолчанию `Resources/settings.json`. |
| 14 | - `UseJsonFile(path, scope)` — свой файл на scope (Default / User / Global). |
| 15 | - Формат: JSON с ключами-группами, значения — массивы `{ "key", "value", "valueKind", "tag" }`. |
| 16 | - User: `{UserProfile}/.config/{AppName}/settings.json`, Global: `{CommonAppData}/{AppName}/settings.json`. |
| 17 | |
| 18 | ## Сравнение с текущим подходом в Cascade IDE |
| 19 | |
| 20 | | Сейчас | OutWit.Common.Settings | |
| 21 | |--------|-------------------------| |
| 22 | | Два TOML в `%LocalAppData%\CascadeIDE\` (`settings.toml`, `ai-keys.toml`) | Один или несколько JSON по scope, формат «группы + entries» | |
| 23 | | POCO (CascadeIdeSettings, AiKeys) + ModelBase, SaveIfChanged | Контейнеры с AOP, менеджер сам грузит/сохраняет через провайдер | |
| 24 | | Без DI, Load/Save в сервисах | AddSettings + GetService<IAppSettings>() | |
| 25 | |
| 26 | ## TOML |
| 27 | |
| 28 | В библиотеке провайдера TOML нет. Чтобы сохранить TOML, можно: |
| 29 | |
| 30 | - Реализовать `ISettingsProvider` (Read/Write по группе в виде `List<SettingsEntry>`), сериализуя в TOML (например, секция = группа, ключи = Key, значения = Value). Один файл `settings.toml` или файл на группу. |
| 31 | |
| 32 | ## Вывод |
| 33 | |
| 34 | Подключение OutWit.Common.Settings даёт типобезопасные настройки, AOP и несколько scope’ов, но меняет модель (контейнеры + группы + entries) и формат файлов, и завязан на DI. Для Cascade IDE либо вводить DI и переходить на их контейнеры и JSON, либо оставить текущий подход (ModelBase + TOML/JSON) и при желании добавить свой TOML-провайдер по образцу Json. |
| 35 | |