0

我有以下代码使用非通用方法解析服务。我不能使用可以解决我的问题的通用类型,因为我不知道要传入的类型。

我不喜欢最后一行,它运行良好,但我想知道是否可以将我的处理程序“转换”到正确的接口以便直接调用 Handle 方法?在我的情况下,我确信 resolve 返回的类型将是 handlerType 类型。

var handlerType = typeof (IQueryHandler<,>).MakeGenericType(query.GetType(), typeof (TResponseData));
var handler = _container.Resolve(handlerType);
var resp = new Response<TResponseData>();
resp.Data =  (TResponseData) handler.GetType().GetMethod("Handle").Invoke(handler, new object[] {query});
4

1 回答 1

3

如果你不喜欢最后使用反射,你可以利用dynamic关键字:

var handlerType = typeof (IQueryHandler<,>)
                       .MakeGenericType(query.GetType(), typeof (TResponseData));
dynamic handler = _container.Resolve(handlerType);
var resp = new Response<TResponseData>();
resp.Data =  (TResponseData) handler.Handle(query);
于 2013-08-12T16:06:36.300 回答