配置强化类型以扩展与服务器继承模式无关的 class
configuring reinforced-typings to extend a class unrelated to server inheritence pattern
我有一个像这样的简单 DTO
public class MyDTO {
public string Name {get; set;}
}
我希望客户端使用的所有typescript接口都具有服务器上MyDTO的属性,并扩展BreezeJS entity type。也就是说,打字稿文件的输出应该变成
export interface IMyDTO extends breeze.Entity {
name: string
}
但是服务器/.NET 类型是一个简单的 POCO(即不派生自任何 类),因为 BreezeJS.Entity 类型的成员纯粹与管理 client/in ECMAScript 环境。
如何 Reinforced.Typings 流利地 API 实现此目标?
考虑使用以下代码生成器:
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>());
}
我有一个像这样的简单 DTO
public class MyDTO {
public string Name {get; set;}
}
我希望客户端使用的所有typescript接口都具有服务器上MyDTO的属性,并扩展BreezeJS entity type。也就是说,打字稿文件的输出应该变成
export interface IMyDTO extends breeze.Entity {
name: string
}
但是服务器/.NET 类型是一个简单的 POCO(即不派生自任何 类),因为 BreezeJS.Entity 类型的成员纯粹与管理 client/in ECMAScript 环境。
如何 Reinforced.Typings 流利地 API 实现此目标?
考虑使用以下代码生成器:
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>());
}