servicestack,C#,servicestack" /> servicestack,C#,servicestack" />

C# 在IReturn中将接口用作模板的ServiceStack<;T>;

C# 在IReturn中将接口用作模板的ServiceStack<;T>;,c#,servicestack,C#,servicestack,我有一个关于我的问题。 我发现 “接口绝对不是定义服务接口的完美有效方式” 但是,尽管如此,如果有这样做的需要或想法呢。 有没有办法在创建抽象类时不出现异常?您所引用的内容可能是指WCF使用接口定义服务的方法。WCF但此引用与ServiceStack的IReturn接口标记完全无关,它是一个良性接口,其唯一目的是启用简洁类型的API,而无需在调用站点上定义返回类型,例如: CustomerResponse response = client.Get(new GetCustomer { Id =

我有一个关于我的问题。 我发现

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

但是,尽管如此,如果有这样做的需要或想法呢。
有没有办法在创建抽象类时不出现异常?

您所引用的内容可能是指WCF使用接口定义服务的方法。WCF但此引用与ServiceStack的
IReturn
接口标记完全无关,它是一个良性接口,其唯一目的是启用简洁类型的API,而无需在调用站点上定义返回类型,例如:

CustomerResponse response = client.Get(new GetCustomer { Id = 1 });
CustomerResponse response = client.Get<CustomerResponse>(new GetCustomer { Id = 1 });
如果请求DTO没有IReturn标记,则每个客户端都需要在呼叫站点上定义返回类型,例如:

CustomerResponse response = client.Get(new GetCustomer { Id = 1 });
CustomerResponse response = client.Get<CustomerResponse>(new GetCustomer { Id = 1 });
CustomerResponse response=client.Get(newgetcustomer{Id=1});
这是不必要的,并且可能是人为错误的来源,因为客户端需要为每个服务提供正确的响应类型,而如果返回类型仅在服务器上定义一次(即权威源)然后,所有客户机都会自动使用正确的响应类型,因为它嵌入到请求DTO契约中——这是正确的位置,因为它定义了公共服务契约的一部分


没有理由不包括
IReturn
标记,唯一有效的理由是如果您的服务返回多个不同的响应类型,但这本身就是一种反模式,是一种只能在运行时检测到的错误源,例如,最差的一种。

我认为您的示例中缺少了等号?那么,当T也是一个列表时,定义IReturn可以吗?@labilbe它只用于告诉客户端应该将响应反序列化为什么类型,并且应该与服务器响应类型兼容,因此可以是
Poco
string
字节[]
列表
等不能是接口吗?我发现元数据页面在IReturn中不能与接口(IEnumerable除外)一起工作。