我喜欢使用新的api i ServiceStack,并且在遗留项目中有一些Pocos,我希望保持不变。但是在我的ServiceStack项目中将它们复制到Dto是有点不合理的。我能以某种方式懒惰并“传递”属性到我的传统pocos吗?
这适用于JsonServiceClient,但是为json增加了一个额外的级别,我不喜欢这样:
[Route("/legacytype", "POST,OPTIONS")]
public class RequestLegacyTypePost : IReturn<int>
{
public LegacyTypeLegacyType{ get; set; }
}
public class LegacyTypeService : Service
{
public object Post(RequestLegacyTypePost request)
{
return db.Insert(request.LegacyType);
}
}
以DTO方式复制粘贴属性自然可以正常工作:
[Route("/legacytype", "POST,OPTIONS")]
public class RequestLegacyTypePost : IReturn<int>
{
public int Id { get; set; }
public string SomeProp { get; set; }
public string OtherProp { get; set; }
}
也许这种简化是最佳做法?
答案 0 :(得分:2)
ServiceStack允许您将任何现有Poco重新用作请求DTO,如果您不想修改现有的旧dll,则可以使用AppHost.Configure()中的Fluent API以非侵入方式添加路径:
Routes
.Add<LegacyTypeLegacyType>("/legacytype", "POST,OPTIONS");
答案 1 :(得分:1)
您还可以将模型继承到自定义DTO中,例如:
[Route("/legacytype", "POST,OPTIONS")]
RequestLegacyTypeDTO : LegacyType, IReturn<int> { }
这样,您就可以访问原始LegacyType
模型的所有属性而无需更改。