是否可以使接口方法返回具有C#中通用类型参数的另一个方法的类型?

问题描述 投票:0回答:2

所以我试图创建一些流利的代码来执行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);

然后IUs​​eRequired接口具有调用所需的方法...

IUseOptionalOrExecute UsesApi(string apiName);

[方法所做的全部是告诉使用IHttpClientFactory时要使用哪个HTTPClient。

现在

IUs​​eOptionalOrExecute

接口是问题开始的地方...IUseOptionalOrExecute Returns<TReturn>(); IUseOptionalOrExecute HasToken(string token); Task<TReturn> ExecuteAsync();
我希望它看起来像这样,所以传递给

Returns

方法的任何内容都将用作ExecuteAsync方法的返回。当然,这是行不通的,因为ExecuteAsync不知道TReturn是什么。我曾考虑过在调用[[Returns方法时将类型存储为变量,但是我无法将Execute的返回类型设置为变量类型。可以吗有人知道我可以解决这个问题的方法吗?谢谢!
c# generics interface httpclient fluent
2个回答
1
投票
当我实现HTTP客户端时,我在ExecuteAsync<TReturn>上指定了返回类型,因为无需事先知道该类型,因此避免了解决您的问题。

如果出于某种原因需要类型,我想您可能需要执行IUseOptionalOrExecute<TReturn> Returns<TReturn>();并处理所有必要的并发症。

如果ExecuteAsync<TReturn>不足以解决您的问题,我可以进一步说明。


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.