Вы, вероятно, не видите его вокруг, потому что на самом деле его довольно сложно реализовать. Я использую T4 для создания классов моделей из DTO WCF для использования в варианте WinForms MVP на некоторое время, и потребовалось довольно много времени, чтобы заставить его работать правильно.
Использование класса в качестве источника данных для шаблона довольно сложно в самом себе. Вам нужно будет выбрать между использованием рефлексии (или аналогичного API) для чтения скомпилированных IL или CodeDom для чтения исходного кода. Если вы решите работать с скомпилированными сборками, вам придется бороться с такими проблемами, как блокировка файлов и загрузка ссылочных ассемблеров. Если вы решите работать с исходным кодом, вам придется иметь дело с потенциальным несовместимым кодом.
После того, как вы приняли это решение, копирование свойств будет наиболее тривиальной задачей, которую вам нужно будет сделать. Вам также необходимо будет принять решение о том, какие интерфейсы и атрибуты (если они есть) в исходном классе должны быть повторно реализованы/скопированы в сгенерированный класс. В зависимости от того, как вы реализуете такие вещи, как валидация, это может вызвать всевозможные небольшие придирчивые проблемы. Также есть много веских решений, которые помогут справиться с иерархиями наследования и ссылками на другие классы моделей.
Все вышесказанное адресуемо, но подход, основанный на одном уровне, будет довольно сложно реализовать. Возвращаясь к «примерной» части вашего вопроса, есть также потенциальная проблема, заключающаяся в том, что вы делаете довольно много работы, не заплатив за нее. Мне бы хотелось поделиться с T4, который я создал для создания модели, но он принадлежит моему работодателю, и у меня есть лучшее, что связано с моим свободным временем, чем повторное внедрение подхода для публикации в Интернете ...
Сгенерировать их из чего? – SLaks
SLaks: Из моих моделей ... Поэтому вместо того, чтобы сначала менять модель, а затем менять модель обзора, я мог бы полагаться на генерацию кода для генерации скучных частей моей модели просмотра (например, открытых свойств) – rozon