Адекватный способ управления пользовательскими настройками с возможностью их выполнения во время выполнения
Я пытаюсь изучить DI, создавая игру для единства. Я добрался до реализации системы/сервиса, который будет применять пользовательские настройки (такие как громкость музыки/sfx, масштабирование разрешения, качество графики), и я полностью споткнулся.
Я понимаю, как реализовать конфигурацию DI способом: корень композиции знает о файле конфигурации, и когда какому-то классу требуется значение, корень композиции просто запрашивает и получает его из файла. Но, во-первых, это игра, поэтому важно, чтобы на лету менялось как можно больше опций. Во-вторых, большинство опций не имеют ничего общего с тем, что я предоставляю в корне композиции, и просто доступно через любой класс, который использует UnityEngine.
Я сам не могу думать ни о каком другом способе, кроме большого оператора switch case с большим количеством повторяющегося кода. Я попытался реализовать ICommandService из «Принципов, практик и шаблонов внедрения зависимостей Марка Симанна, Стивена ван Дерсена», но это совсем не помогло, по-прежнему повторяющийся код для каждой настройки. Я пытался искать в Интернете, но буквально ничего, кроме таких вещей, как System.Configuration и способов записи/чтения настроек из файла json.
Может я совсем не так мыслю? Но как не вводить слишком много, если у меня так много систем, для которых я хочу иметь варианты? На данный момент я могу сериализовать/десериализовать объект данных настроек, определить, какие параметры были изменены для дальнейшего выполнения. Я действительно думаю, что ошибаюсь, пытаясь «выполнить» параметры, и это нужно сделать каким-то другим способом, но я не могу найти ничего даже близкого к этой теме.