【发布时间】:2013-12-31 18:40:42
【问题描述】:
问题
我知道在 ServiceStack 中使用名称为“Get”、“Post”、“Any”等的方法在服务中创建路由/端点的基本方法,但在我正在尝试的特定情况下使用我有一个现有的服务(我可以通过继承创建一个 IService),该服务无法使用 ServiceStack 属性进行改造,并且当前使用 DTO 进行请求和响应。
该服务包含许多我不想手动屏蔽的功能(因为这是一个传递层),但已经符合 ServiceStack 的要求。我想知道是否有一种方法可以手动创建这些路由,就像我模拟了here 一样。我现有的函数和 DTO 已经包含定义路由所需的信息,因此如果这种方法可行,我只需要在初始化时枚举它们,而不是手动生成服务层。
我注意到 Routes.Add 上有一个扩展方法,它采用 Expression> 类型的表达式,但我无法让它工作,因为我相信底层代码对生成的表达式类型做出了假设(LambdaExpression 与 MemberExpression 或类似的东西)。如果这不是该函数的预期目的,我也可能会找错树,但我无法在任何地方找到关于该变体应该如何工作的文档。
为什么?
我不确定这是否有必要,但要阐明我为什么要这样做而不是改造我现有的层:当前代码也在 Web 服务上下文之外使用,并在内部由其他代码使用.将 ServiceStack 改造到这一层将使每个使用它的地方都需要 ServiceStack 的程序集,并注意 Web 服务,这是我希望将其与较低代码分开的问题。我们之前使用 MVC/WCF 来实现这个目标,但我们想要一些 ServiceStack 提供的功能。
当前架构如下所示: 数据 -> DAL -> 离散业务逻辑 -> 组合 -> Web 服务
希望这有足够的意义,我并没有变得迟钝。如果您想了解更多关于我想要做什么或为什么我会尝试尽快更新这篇文章的详细信息。
谢谢!
【问题讨论】:
-
您可以在ServiceStack's user voice 上提出功能请求,但像这样不必要的委托并不是我们认为的任何价值。ServiceStack 的服务层应该是最外层,它实现了外部-面对服务合同,这只会造成不必要的混乱,与目前存在的显式、直观和可调试的替代方案相比,并没有增加太多价值。
-
感谢您的回答。虽然我理解你的立场,但我仍然有兴趣追求它。如果您不介意,我对代码中的哪个位置感兴趣,以查看该委托发生的位置(并可能扩展它)。此外,如果您知道有关该表达式参数的任何文档,我很乐意看到它。再次感谢您的回复。
-
在准备缓存之前有相当多的准备工作,但您可以在调用动词的位置添加break-point here。
标签: servicestack