Одно соображение, о котором я не упомянул, заключается в том, что предпочтение решения с использованием экземпляра класса (синглтонов или их DI-эквивалента) позволяет вам предоставить класс, для которого другие пользователи вашего кода могут определять методы расширения - поскольку методы расширения работают только с нестатическими классами в качестве параметра this
. Другими словами, если у вас есть строка вроде:
GlobalSettings.SomeMethod();
Тогда синтаксически единственная вещь, к которой можно получить доступ через GlobalSettings
, это члены, которых вы предоставляете. Напротив, если GlobalSettings
является экземпляром (одиночным или другим), то потребители могут добавить свои собственные расширения к GlobalSettings
, которые они не смогут сделать иначе:
application.GlobalSettings.CustomSomethingOrOther();
или
GlobalSettings.Instance.CustomSomethingOrOther();