Поставщики форматов подключаются, но, насколько я знаю, вы не можете настроить поставщика формата по умолчанию для данного типа. Методы, которые принимают формат строк по соглашению, обычно также имеют перегрузку, которая принимает IFormatProvider. Вы можете реализовать два класса, такие как MyFormatProvider: IFormatProvider и MyCustomFormatter: ICustomFormatter.
Когда обрабатывается строка формата, такая как «{0: dd} {0: или} {0: MMM} {0: yyyy}", ваш ICustomFormatter будет вызываться 4 раза, с "dd", "или «, MMM» и «yyyy» в качестве параметров, чтобы он мог форматировать каждую часть отдельно. Вам просто нужно обработать «или» случай и передать остальные на поставщика формата по умолчанию.
Однако при форматировании вызывающему абоненту все равно необходимо передать экземпляр поставщика настраиваемого формата. Например:
string str = String.Format(MyFormatProvider.Default, "{0:dd}{0:or} {0:MMM} {0:yyyy}", date);
Насколько я знаю, этого требования не избежать. Я искал лучший путь назад, когда создал «относительную» строку формата DateTime, которая отображала DateTimes как «1 час назад», «3 дня назад» и т. Д. Не удалось найти способ избежать явного передать мой пользовательский метод IFormatProvider.
Спасибо за ответ Бруно. однако я искал метод, который не был настолько навязчивым для пользователя. – Simon