CodeProcessor 似乎是这样做的旧方式,我认为它仅限于生成实体。在较新的版本中,我们可以为所有不同的部分指定基于 T4 的生成器。
从 WebProejct 或包含代码生成类的类库中的 Nuget安装RIAServices.T4 。PM> 安装包 RIAServices.T4
如果您已经拥有该工具包,只需添加对“Microsoft.ServiceModel.DomainServices.Tools.TextTemplate”的引用
然后我们需要从 CSharpClientCodeGenerator 继承,它不会真正生成任何东西,而只是通过覆盖它的一些属性来告诉 RIA 使用哪些生成器。
[DomainServiceClientCodeGenerator("MyCustomGenerator", "C#")]
public class MyCSharpClientCodeGenerator : CSharpClientCodeGenerator
protected override Microsoft.ServiceModel.DomainServices.Tools.TextTemplate.DomainContextGenerator DomainContextGenerator
{
get
{
//return base.DomainContextGenerator;
return new MyDomainContextGenerator();
}
}
然后我们告诉 R# 为我们实现该类 (MyDomainContextGenerator),它必须从 CSharpDomainContextGenerator 继承。当然,如果您使用 R#,它只会为您完成。
您可以从 MyCSharpClientCodeGenerator 提供其他 4 个不同的代码生成器。
现在要将其全部连接起来,在 Silverlight 项目文件中,我们需要告诉 RIA 使用我们的生成器。我们必须编辑 Silverlight 项目并在 LinkedServerProject 之后的第一个 PropertyGroup 中添加以下元素(顺序无关紧要,我只是说作为参考)。
<LinkedServerProject>..\SilverlightApplication2.Web\SilverlightApplication2.Web.csproj</LinkedServerProject>
<RiaClientCodeGeneratorName>
SilverlightApplication2.Web.RiaStuff.MyCSharpClientCodeGenerator,SilverlightApplication2.Web
</RiaClientCodeGeneratorName>
</PropertyGroup>
重新编译 Silverlight 项目,瞧。它可能会崩溃。为了调试它,我们可以打开另一个 Visual Studio 实例,在这个新实例中的生成器上设置断点,附加到 Visual Studio 的第一个实例并重新编译 Silverlight 项目。