Как я могу заставить T4 генерировать код на основе классов в определенном пространстве имен (рекурсивно)

Уровень обслуживания моей архитектуры состоит из множества классов команд единственного назначения (классов, которые выполняют одну конкретную функцию с данными, например, создание пользователя) и классы запросов (отдельные классы, которые запрашивают в базе данных определенные данные). Они вводятся в мои классы контроллера Asp.net MVC через установщики Windsor.

Например, я запускаю container.Register (Component.For () .ImplementedBy ()); в моем пользовательском классе IWindsorInstaller для создания экземпляра CreateUserCommand в моих контроллерах.

Проблема в том, что, поскольку каждый класс команды / запроса является единственной целью, у меня будет много этих классов, и поддержание моего класса установщика будет проблемой прикладом. Мне пришло в голову, что это была бы идеальная работа для T4, так как я могу просто запустить T4 и восстановить класс установщика для автоматической регистрации всех моих классов команд и запросов.

К сожалению, поскольку я никогда раньше не делал T4, я не знаю, как приступить к реализации этого. Я прочитал основы T4, но моя основная проблема заключается в том, как на самом деле найти все мои классы команд и запросов через T4.

На бумаге я могу найти все свои классы команд / запросов, потому что они определены в пространствах имен MyApp.DomainModel.Commands. * и MyApp.DomainModel.Queries. * . Например, класс CreateUserCommand находится в пространстве имен MyApp.DomainModel.Queries.Users . Однако я понятия не имею, как на самом деле просматривать пространства имен во время выполнения, не говоря уже о рекурсии.

Я могу создать интерфейс ICommand и IQuery , чтобы эти классы основывались на том, что ' в T4 легче найти, чем в пространствах имен, но я не знаю, как найти все подклассы ICommand / IQuery через T4.

Я знаю отражение, но читая, я много читал, говоря что использование отражения в T4 - плохая идея и / или не работает должным образом.

Если бы кто-нибудь мог указать мне на что-нибудь, что могло бы помочь мне в этом, я был бы очень признателен!

5
задан KallDrexx 6 April 2011 в 21:40
поделиться