如何将对象转换为正确的类型

时间:2013-08-12 15:33:01

标签: c# autofac

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

我不喜欢最后一行,它运行良好,但我想知道我是否可以将我的处理程序“转换”到正确的界面,以便直接调用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});

1 个答案:

答案 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);