Ответ 1
Предположим, что у вас есть какой-то произвольный объект данных в мире. В этом примере предположим, что это электронная таблица.
Предположим также, что у вас есть способ получить/вывести схему/метаданные для этих данных - то есть вы можете знать типы (например, double versus string) и отношения (например, этот столбец означает "зарплата" ) и метаданные (например, это лист предназначен для бюджета в июне 2009 года).
Поставщики типов позволяют вам кодировать некоторую "библиотеку прокладки", которая знает о каком-то объекте данных (например, электронную таблицу) и использует эту библиотеку как часть инструментальной цепочки компилятора /IDE, чтобы вы могли писать код, например
mySpreadsheet.ByRowAndColumn.C4
или что-то еще, и получить Intellisense (автозаполнение) и всплывающие подсказки (например, описать ячейку C4 в качестве зарплаты для Боба) и статическую типизацию (например, будь то двойная или строка или что-то еще). По сути, это дает вам возможность использования статически типизированных объектных моделей с простотой использования различных динамических систем или систем генерации кода с некоторыми улучшениями для обоих. "Стоимость" заключается в том, что кто-то должен написать библиотеку прокладки ( "поставщик типа" ), но многие из таких поставщиков очень общие (например, тот, который говорит OData или Excel или WMI или еще что-то), и поэтому небольшая группа библиотек поставщиков типов предоставляет огромное количество мировых данных на вашем языке программирования со статической типизацией и поддержкой первоклассного инструментария.
Архитектура является открытым компилятором, где провайдеры-провайдеры реализуют небольшой интерфейс, который позволяет им вводить новые имена/типы в контекст программирования. Поставщиком типа может быть только другая библиотека, которую вы передаете компилятору (ссылка в вашем проекте, -r
-ed), с дополнительными метаданными, которые маркируют его как поставщика типов, который участвует в частях разработки компиляции /IDE/codegen.
Я не знаю точно, что "пользовательский сопоставитель" находится в вашем примере xml, чтобы провести сравнение.