VsAddin или T4 для генерации кода (VS 2008) - PullRequest
0 голосов
/ 30 июля 2010

Я создал надстройку для генерации кода (C #, VS 08) для нашей команды.

Надстройка создает новый пункт меню, если я щелкаю файл в обозревателе решений.Там я могу выбрать целевой тестовый проект, в котором сгенерированы 2 файла.

Для процесса генерации кода мне нужна информация из выбранного элемента в обозревателе решений (например, интерфейсы, общие типы объявления класса).

Мой исходный класс выглядит как

public class CustomerLogic : BaseBL<T1, T2, T3>, ICustomerBL

сгенерированный контейнерный класс

public class CustomerContainer : BaseBLDummyContainer<T1, T2, T3>

сгенерированный фиктивный класс выглядиткак

public class CustomerBLDummy : BaseBLDummy<T1, T2, T3, CustomerContainer>, ICustomer

Как я это понял?

Я создал два шаблона (контейнер и пустышка), поместил заполнитель в пробелы, чтобы два файла шаблона выглядели как

Containertemplate

public class $Classname$ : BaseBLDummyContainer<$T1$, $T2$, $T3$>

Dummytemplate

public class $Classname$ : BaseBLDummy<$T1$, $T2$, $T3$, $TContainer$>$, TInterface$

Для генерации шаблонов я написал некоторый код для

  • , создайте файлы
  • добавьте их в целевой проект
  • создайте методы, если это необходимо

Вы видите, что "много" нужно сделать только для генерации некоторого кода.

  1. Теперь я считаю, что поколение с Т4 лучшеРешение для моей ситуации?
  2. Есть ли у меня некоторые преимущества механизма T4?(Я вижу только некоторые образцы T4 в сочетании с EF или генерацией, связанной с базой данных)
  3. Должен ли я быть более гибким с T4?

Спасибо большое.

1 Ответ

1 голос
/ 31 июля 2010

Вам не нужно делать один или / или выбор здесь 'k', вы можете смешивать и сопоставлять надстройки и T4.

T4 имеет очень простую привязку пользовательского интерфейса к Visual Studio изполе, которое просто использует механизм Custom Tool (IVsSingleFileGenerator) для подключения файла шаблона к выходному файлу в проекте.(См. Проект сообщества T4Toolbox для более сложных выводов).

Однако T4 также предоставляет служебный интерфейс в VS (STextTemplating / ITextTemplating), который можно использовать как из надстроек VS, так и из пакетов VS.

Таким образом, вы можете сохранить точку входа и основной способ работы надстройки, но используйте T4, чтобы обеспечить механизм шаблонов и избежать необходимости поддерживать эту часть самостоятельно.Скорее всего, вы использовали бы директиву <# @ parameter #> для передачи параметров замены в ваш шаблон для T1, T2, T3 и т. Д.

Надеюсь, это даст вам некоторые идеи для вариантов продвижения вперед.

...