【发布时间】:2011-04-06 21:40:51
【问题描述】:
我的架构的服务层由许多单一用途的命令类(对数据执行特定功能的类,例如创建用户)和查询类(查询数据库以获取特定数据的各个类)组成。这些通过 Windsor 安装程序注入到我的 Asp.net MVC 控制器类中。
例如,我在我的自定义 IWindsorInstaller 类中运行 container.Register(Component.For<CreateUserCommand>().ImplementedBy<CreateUserCommand>()); 以在我的控制器中实例化 CreateUserCommand。
问题在于,由于每个命令/查询类都是单一用途的,我最终会得到很多这样的类,并且维护我的安装程序类将是一件麻烦事。我突然想到这对于 T4 来说是一项完美的工作,因为我可以只运行 T4 并让它重新生成安装程序类以自动注册我的所有命令和查询类。
不幸的是,因为在我不知道如何着手实际实施之前,我从未做过 T4。我已经阅读了 T4 的基础知识,但我的主要困惑是如何通过 T4 实际找到我的所有命令和查询类。
在纸面上,我可以找到我所有的命令/查询类,因为它们是在 MyApp.DomainModel.Commands.* 和 MyApp.DomainModel.Queries.* 命名空间中定义的。例如,CreateUserCommand 类位于 MyApp.DomainModel.Queries.Users 命名空间中。但是,我不知道如何在运行时实际查看名称空间,更不用说递归了。
我可以为这些类创建一个 ICommand 和 IQuery 接口,基于在 T4 中是否比命名空间更容易找到,但我不知道如何找到所有 ICommand/IQuery通过 T4 的子类。
我知道反射,但从阅读中我读到很多说在 T4 中使用反射是一个坏主意和/或不能正常工作。
如果有人能指出任何可以帮助我实现这一目标的东西,我将不胜感激!
【问题讨论】:
标签: c# namespaces t4