代码从现有类生成C#类

代码从现有类生成C#类,c#,t4,codedom,C#,T4,Codedom,我想找到一种从现有类生成C#类的方法。对于我的一些应用程序服务类,我喜欢创建一个servicebuildertest类来帮助进行单元测试,并希望动态生成它 例如: 我有一节课 public class MyAppService { public MyAppService(IRepository<Person> personRepository, etc....) { } } 公共类MyAppService { 公共MyAppService(IRepository

我想找到一种从现有类生成C#类的方法。对于我的一些应用程序服务类,我喜欢创建一个servicebuildertest类来帮助进行单元测试,并希望动态生成它

例如: 我有一节课

public class MyAppService
{
   public MyAppService(IRepository<Person> personRepository, etc....)
   {
   }
}
公共类MyAppService
{
公共MyAppService(IRepository personRepository等)
{
}
}
我想创建测试生成器类

public class MyAppServiceTestBuilder
{
    private IRepository<Person> _personRepository;

    public void WithPersonRepository(Mock<IRepository<Person>> personRepository)
    {
        _personRepository = personRepository.Object;
    }

    public void Build()
    {
        return new MyAppService(
         _personRepository ?? new Mock<IRepository<Person>>().Object);
    }
}
公共类MyAppServiceTestBuilder
{
个人信息存储库;
使用personRepository的公共void(模拟personRepository)
{
_personRepository=personRepository.Object;
}
公共void Build()
{
返回新的MyAppService(
_personRepository??新建Mock().Object);
}
}
关于使用哪种技术,可以提供一些提示: 我有以下建议:CodeDOM,Roslyn,T4

对于T4,似乎每个文件都需要一个模板,而我并不真正想要,我想它的好处是对applicationservice的任何更改都会自动更新testbuilder

我开始使用CodeDOM,但有人建议这是一项古老的技术,Roslyn也会这么做,而且会做更多


非常感谢……

您在这方面处于什么阶段?您是否已经在生成代码,但正在寻找一种动态生成代码的方法,或者您还没有做到这一点?很抱歉,我的问题是指“动态编译”。我已经在CodeDOM中编写了代码(不支持null coalesce运算符除外),但我在一个单独的控制台应用程序中使用了它,它引用了包含我的应用程序服务的库。因此,本质上它现在有点笨重。我想找到一种在工作解决方案中运行它的方法。当你说“动态生成”时,你的意思是基于另一个项目中的选定类在测试项目中创建一个新的cs文件吗?你处于什么阶段?您是否已经在生成代码,但正在寻找一种动态生成代码的方法,或者您还没有做到这一点?很抱歉,我的问题是指“动态编译”。我已经在CodeDOM中编写了代码(不支持null coalesce运算符除外),但我在一个单独的控制台应用程序中使用了它,它引用了包含我的应用程序服务的库。因此,本质上它现在有点笨重。我想找到一种在工作解决方案中运行它的方法。当你说“动态生成”时,你的意思是基于另一个项目中的选定类在测试项目中创建一个新的cs文件吗?你处于什么阶段?您是否已经在生成代码,但正在寻找一种动态生成代码的方法,或者您还没有做到这一点?很抱歉,我的问题是指“动态编译”。我已经在CodeDOM中编写了代码(不支持null coalesce运算符除外),但我在一个单独的控制台应用程序中使用了它,它引用了包含我的应用程序服务的库。因此,本质上它现在有点笨重。我想找到一种在工作解决方案中运行它的方法。当你说“动态生成”时,你的意思是基于另一个项目中的选定类在测试项目中创建一个新的cs文件吗?