Добавление свойства не нарушает взаимодействия класса с существующими клиентами, так что это действительно кажется "самым простым" подходом.
Более важной, однако, является функция нового свойства. Логически это часть существующего класса? Изменить класс. Если нет, то метод расширения может быть предпочтительнее, но тогда проблема заключается в видимости метода расширения и области его клиентов.
Как всегда, сложность - враг. В этом случае кажется, что синглтон - это очень сложное решение, а метод расширения - «попал», в зависимости от области видимости и проблем видимости. Изменение класса является самым простым и, вероятно, значительно упростит долгосрочное обслуживание.
ОБНОВЛЕНИЕ: обратите внимание, что методы расширения являются статическими, и из-за этого для метода расширения довольно сложно хранить данные в любое время, так как это свойство будет запрещено.
ВТОРОЕ ОБНОВЛЕНИЕ: Если у вас есть доступ к источнику для класса, рассмотрите возможность сделать его частичным классом и поместите ваше новое свойство в отдельный файл, но часть того же частичного класса. Это позволяет отделить его от основной части класса для целей обслуживания и будет работать с большинством ORM. Однако существует ограничение на то, что члены класса должны быть в одной сборке.