【问题标题】:ServiceStack Serviceless for CQRS用于 CQRS 的 ServiceStack 无服务
【发布时间】:2016-04-15 13:39:48
【问题描述】:

我希望能够利用 ServiceStacks 路由和内置文档功能,根据带有路由和动词的消息类型注释公开服务操作。通用服务将简单地将接收到的请求委托给另一个请求处理服务。

例如。 给我以下类型并为每个配置了动词的路由 公共类请求{}

 [Route("/order", "POST")]
 public class PlaceOrder : Request { }

 [Route("/order/{id}", "GET")]
 public class OrderDetailsCriteria : Request {
     Guid OrderId { get; set; }
 }

 public class OrderDetails { }

 [Route("/inventoryItem/{id}", "PATCH")]
 public class ReduceInventory : Request {
     Guid InventoryItemId { get; set; }
 }

我想创建一个简单的服务来处理所有这些,但同时只允许类型属性中配置的动词 类似:

public class MyService : Service {
    public void Post(Request request) {
        RequestService.Send(request);
    }

    public void Patch(Request request) { 
        RequestService.Send(request);
    }

    public object Get(Request request) {
        return RequestService.Send(request);
    }
}

基本上我不想创建一个服务或每组请求类型,因为每个方法实际上都在做同样的事情。

【问题讨论】:

    标签: servicestack cqrs


    【解决方案1】:

    您可以使用Any() 方法定义单个实现来处理请求的所有动词,例如:

    public object Any(MyRequest request)
    {
        var verb = base.Request.Verb; //if needed
        ...
        RequestService.Send(request);
    }
    

    【讨论】:

    • 谢谢。是的,我的第一个想法是这样做,但我没有获得元数据操作文档。所以我假设 ServiceStack 必须在服务上使用反射才能发现能够生成文档的类型
    • @RicardodaSilva 我还强烈建议在请求 DTO 中添加 IReturn<T>IReturnVoid 标记,这些标记为您的服务客户端提供元数据信息、强类型和良好的 API。
    猜你喜欢
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    相关资源
    最近更新 更多