在IReturn <T>中使用接口作为模板的ServiceStack

Mic*_*alT 3 c# servicestack

我有一个关于IReturn的问题.我发现

"接口绝对不是定义服务接口的完美有效方式".

但是,尽管如此,仍然有需要或想法这样做.如果没有关于创建抽象类的例外,有没有办法做到这一点?

myt*_*thz 5

您引用的内容可能是指WCF使用接口定义服务的方法.WCF 推广了几种服务反模式,但这个引用与ServiceStack的IReturn<T>接口标记完全无关,这是一个良性接口,其唯一目的是启用简洁的类型API而无需在调用站点上定义返回类型,例如:

CustomerResponse response = client.Get(new GetCustomer { Id = 1 });
Run Code Online (Sandbox Code Playgroud)

如果请求DTO没有IReturn<T>标记,则每个客户端都需要在呼叫站点上定义返回类型,例如:

CustomerResponse response = client.Get<CustomerResponse>(new GetCustomer { Id = 1 });
Run Code Online (Sandbox Code Playgroud)

这是不必要的并且是人为错误的潜在来源,因为客户端需要为每个服务提供正确的响应类型,而如果返回类型仅在服务器上定义一次(即权威来源),则所有客户端将自动使用正确的响应输入,因为它嵌入在Request DTO合同中 - 因为它定义了您的公共服务合同的一部分,所以它是正确的地方.

IReturn<T>如果您的服务返回多个不同的响应类型,那么您没有理由不包含标记,这是唯一有效的理由,但这本身就是一种反模式和错误来源,只有在运行时,即最糟糕的一种.