所以我试图创建一些流利的代码来执行Web请求。我希望它看起来像这样...
// Result should be of type MyClass
var result = await _webRequests.Get("Api/Route/Here")
.Returns<MyClass>()
.HasToken("MY_TOKEN")
.ExecuteAsync();
// Result should be of type HttpResponseMessage
var result = await _webRequests.Get("Api/Route/Here")
.HasToken("MY_TOKEN")
.ExecuteAsync();
我旨在获取它,以便如果未指定Returns方法,则它将返回HttpResponseMessage,如果已指定,则它将返回指定的类型。
_ webRequests是其中包含一些基本HttpMethod调用的接口
IUseRequired Get(string url);
IUseRequired Post(string url);
然后IUseRequired接口具有调用所需的方法...
IUseOptionalOrExecute UsesApi(string apiName);
[
IUseOptionalOrExecute
接口是问题开始的地方...IUseOptionalOrExecute Returns<TReturn>();
IUseOptionalOrExecute HasToken(string token);
Task<TReturn> ExecuteAsync();
我希望它看起来像这样,所以传递给方法的任何内容都将用作ExecuteAsync方法的返回。当然,这是行不通的,因为ExecuteAsync不知道TReturn是什么。我曾考虑过在调用[[Returns方法时将类型存储为变量,但是我无法将Execute的返回类型设置为变量类型。可以吗有人知道我可以解决这个问题的方法吗?谢谢!Returns
ExecuteAsync<TReturn>
上指定了返回类型,因为无需事先知道该类型,因此避免了解决您的问题。如果出于某种原因需要类型,我想您可能需要执行IUseOptionalOrExecute<TReturn> Returns<TReturn>();
并处理所有必要的并发症。
如果ExecuteAsync<TReturn>
不足以解决您的问题,我可以进一步说明。