OutWit.Common.Settings — заметки по репозиторию
Просмотр кода: Settings, OutWit.Common.Settings, Json.
Архитектура
- Контейнеры — классы, наследующие
SettingsContainer(ISettingsManager). Свойства перехватываются (AOP) и читают/пишут через менеджер. - Хранение — по группам и записям (
SettingsEntry: Group, Key, Value (string), ValueKind, Tag). Провайдер:Read(group),Write(group, entries). - Регистрация — DI:
services.AddSettings(s => s.UseJson().RegisterContainer<IAppSettings, ApplicationSettings>()). ПослеBuild()—Merge()иLoad().
Json-провайдер
UseJson()— файл по умолчаниюResources/settings.json.UseJsonFile(path, scope)— свой файл на scope (Default / User / Global).- Формат: JSON с ключами-группами, значения — массивы
{ "key", "value", "valueKind", "tag" }. - User:
{UserProfile}/.config/{AppName}/settings.json, Global:{CommonAppData}/{AppName}/settings.json.
Сравнение с текущим подходом в Cascade IDE
| Сейчас | OutWit.Common.Settings |
|---|---|
Два TOML в %LocalAppData%\CascadeIDE\ (settings.toml, ai-keys.toml) |
Один или несколько JSON по scope, формат «группы + entries» |
| POCO (CascadeIdeSettings, AiKeys) + ModelBase, SaveIfChanged | Контейнеры с AOP, менеджер сам грузит/сохраняет через провайдер |
| Без DI, Load/Save в сервисах | AddSettings + GetService<IAppSettings>() |
TOML
В библиотеке провайдера TOML нет. Чтобы сохранить TOML, можно:
- Реализовать
ISettingsProvider(Read/Write по группе в видеList<SettingsEntry>), сериализуя в TOML (например, секция = группа, ключи = Key, значения = Value). Один файлsettings.tomlили файл на группу.
Вывод
Подключение OutWit.Common.Settings даёт типобезопасные настройки, AOP и несколько scope’ов, но меняет модель (контейнеры + группы + entries) и формат файлов, и завязан на DI. Для Cascade IDE либо вводить DI и переходить на их контейнеры и JSON, либо оставить текущий подход (ModelBase + TOML/JSON) и при желании добавить свой TOML-провайдер по образцу Json.