我是一名有用的助手,可以为您提供文本翻译服务。
我正在处理一个异步CQS API。WebAPI方法如下所示:
我正在处理一个异步CQS API。WebAPI方法如下所示:
public async Task<object> Get([FromUri] Contract contract)
{
return await _invoker.Invoke(CreateDto<Query>(contract));
}
无法隐式转换类型 '
System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<Customer>>
' 到 'System.Threading.Tasks.Task<object>
如果不知道类型,如何返回结果的任务?
这是调用泛型类型类的代码
public Task<object> Invoke(Query query)
{
var queryHandlerType = typeof(IQueryHandler<,>);
var queryType = query.GetType();
var queryResultType = queryType.BaseType.GetGenericArguments().First();
var handler = _container.GetInstance(queryHandlerType.MakeGenericType(queryType, queryResultType)) as dynamic;
return handler.Handle(query as dynamic);
}
编辑: 为什么WebApi不支持将Task<T>
作为任务公开呢?如果我从Task
更改为普通的Task
,它就无法工作。它仍然是一个任务,因此WebApi应该能够通过一些魔法解决这个问题。我想要完成这个操作。
public Task Get([FromUri] Contract contract)
{
return _invoker.Invoke(CreateDto<Query>(contract));
}
Task<object>
而不是普通的Task
? - undefined_invoker.Invoke
返回Task<IEnumerable<Customer>>
,但您的Invoke
代码返回Task<object>
。这个类型是从哪里来的?在等待任务完成后,您应该能够将结果向上转换为object
。 - undefined