首页 > 解决方案 > 配置增强类型以扩展与服务器继承模式无关的类

问题描述

我有一个像这样的简单 DTO

public class MyDTO {
   public string Name {get; set;}
}

我希望客户端使用的所有打字稿接口在服务器上都具有 MyDTO 的属性,并且还扩展了 BreezeJS 实体类型。也就是说,打字稿文件的输出应该变成

export interface IMyDTO extends breeze.Entity {
    name: string
}

但是 server/.NET 类型是一个简单的 POCO(即不从任何类派生),因为 BreezeJS.Entity 类型的成员纯粹与管理客户端上的实体/ECMAScript 环境中的实体有关。

如何使用 Reinforced.Typings fluent API 实现这一点?

标签: reinforced-typings

解决方案


考虑使用以下代码生成器:

public class BreezeCodeGenerator : InterfaceCodeGenerator
{

    private static readonly RtSimpleTypeName BreezeBase = new RtSimpleTypeName("breeze.Entity");

    public override RtInterface GenerateNode(Type element, RtInterface result, TypeResolver resolver)
    {
        var b = base.GenerateNode(element, result, resolver);
        if (b == null) return null;
        b.Implementees.Add(BreezeBase);
        return b;
    }
}

并将其应用于您的 POCO,如下所示:

public static void Configure(ConfigurationBuilder builder)
{
    builder.ExportAsInterfaces(
        //or generate IEnumerable of desired POCO types somehow else
        new[] { typeof(BreezeEntity1), typeof(BreezeEntity2) }
        ,
        d => d.WithPublicProperties().WithCodeGenerator<BreezeCodeGenerator>());

}

推荐阅读