Forge
markdowndeeb25a2
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&lt;IAppSettings&gt;() |
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
View only · write via MCP/CIDE