Никогда не используйте Singleton, это всего лишь громкая глобальная переменная, инициализация которой связана с временем жизни вашего процесса , а не ресурсом, которым он управляет.
То, что вы хотите - это объектвнедряется во все зависящие от него области, другими словами, шаблон, который вы ищете, - это внедрение зависимостей.
Для самых простых приложений просто используйте параметры командной строки и объект конфигурации.
Для чуть более сложных приложений разрешите создание объекта конфигурации по умолчанию из файла конфигурации, а затем измените его параметрами командной строки.
Для умеренно более сложных приложений интегрируйте с вашей платформой / языком /Собственное средство реестра ОС для предоставления значений по умолчанию.
Для производственных приложений используйте контейнер IoC-DI и создайте объекты config / db / etc для внешних классов ваших приложений и добавьте их во время выполнения.
Ключ заключается в том, чтобы избежать наличия статического процесса-объекта конфигурации, так как это будет мешать тестированиюg, программный перезапуск и усложнение перехода на более гибкие подходы к настройке.