[英]Reflection of generic method not working
我有一个注册接口的通用静态方法,我需要使用c#反射将其编写。
Services.AddService<ITBroker>(new TBrokerService());
我尝试了以下代码,但无法正常工作
Type[] externTBrokerService = Assembly.LoadFrom("Business.dll").GetTypes();
Type[] externService = Assembly.LoadFrom("ServiceModel.dll").GetTypes();
Type iTBroker = externITBroker[12];
MethodInfo method = externService[1].GetMethods()[2];
//Gets Add Service method
MethodInfo generic = method.MakeGenericMethod(iTBroker);
//Make method generic
generic.Invoke(null,new object[] { externTBrokerService[0]});
//invoke the service
上面的代码为我提供了非常通用的参数例外。
上面的代码写反射的写方法是什么?
就像在评论中一样:
请注意, externTBrokerService[0]
是一种Type
而不是该类型的实例。
有鉴于此,我感到有必要在回答中包括其他意见。
Type iTBroker = externITBroker[12];
这是错的! 迟早将无法找到您的类型,因为此集合中类型的顺序不确定,并且可以更改。 您应该这样做:
Type iTBroker = externITBroker.Single(x => x.Name == "ITBroker");
这远非万无一失,因此请确保条件能给您带来独特的效果。
或直接通过以下方式直接加载该类型(假设这是您类型的AssemblyQualifiedName):
Type.GetType("Business.ITBroker, Business");
要在您的类型上查找方法,可以使用方法Type.GetMethod
的重载之一就可以找到您的方法。
要创建需要作为参数传递的类型的实例,可以使用
Activator.CreateInstance(brokerServiceType);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.