我有以下代码使用非泛型方法解析服务。我不能使用可以解决我的问题的通用的,因为我不知道将要传递的类型。
我不喜欢最后一行,它运行良好,但我想知道我是否可以将我的处理程序“转换”到正确的界面,以便直接调用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});
答案 0 :(得分: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);