有一种通用方法可以从实体中选择一个字段,如下所示
public object GetOrderDynamically<T>(Expression selectPredicate, Expression predicate, Type type)
{
var order = orderFacade.FetchMulti((Expression<Func<Order, bool>>) predicate).AsQueryable();
return order.Select((Expression<Func<Order, T>>)selectPredicate).FirstOrDefault();
}
调用方法的搜索结果为this
问题:我想澄清所选字段的类型。但是这个方法位于业务层,我可以将它与它的接口一起使用。实际上,业务层类将通过IoC注入到我的类中。
不知何故,我想用反射调用我的方法,这些方法通过注入实例化,并且能够将T设置为类型
任何帮助。谢谢
答案 0 :(得分:2)
您想使用MethodInfo上提供的 MakeGenericMethod 方法,例如
someTarget.GetType()
.GetMethod("SomeGenericMethod")
.MakeGenericMethod(typeof(SomeGenericArgument)
.Invoke(someTarget, someParameters);
另见:
Calling generic method with a type argument known only at execution time
编辑 - 对于给定示例
orderBiz.GetOrderDynamically&lt; tt&gt;(selectExp,predicateExp); - unos baghaii 5分钟前
orderBiz.GetType().GetMethod("GetOrderDynamically").MakeGenericMethod(tt).Invoke(orderBiz, new object [] { selectExp, predicateExp });