Пишу клиент API:
ApiRequest.cs:
public abstract class ApiRequest<T> : IApiRequest<T>
{
#region Data Members
private readonly Type _returnType;
#endregion
#region Properties
public Type ReturnType
{
get
{
return _returnType;
}
}
#endregion
#region Constructor
public ApiRequest()
{
_returnType = typeof( T );
}
#endregion
public abstract HttpRequestMessage Build();
}
ApiResponse.cs:
public struct ApiResponse<T> : IApiResponse<T>
{
#region Data Members
private readonly ApiRequest<T> _request;
private readonly T _response;
#endregion
#region Properties
public ApiRequest<T> Request
{
get
{
return _request;
}
}
public T Content
{
get
{
return _response;
}
}
#endregion
public ApiResponse( ApiRequest<T> request, T response )
{
_request = request;
_response = response;
}
}
Учитывая, как расположены классы запроса и ответа, я хотел бы, чтобы клиент был полностью универсальным и имел функцию, возвращающую тип T
запроса и ответа. Я сейчас пытаюсь:
public interface IApiClient
{
IApiResponse<T> Request<IApiRequest<T>>( IApiRequest<T> request );
}
Однако мне не разрешено использовать T в сигнатуре метода, потому что для IApiClient
она не предусмотрена. Как я могу обойти это, чтобы моему ApiClient
не нужно было указывать тип возвращаемого значения?
Похоже, тебе нужно что-то подобное
public interface IApiClient
{
IApiResponse<T> Request<T>(IApiRequest<T> request);
}
Вы можете просто изменить подпись вашего метода Request на: IApiResponse <IApiRequest <T>> Request <T> (IApiRequest <T> request); Таким образом, сам тип не имеет привязанных к нему общих типов.