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