0

我有一个注册接口的通用静态方法,我需要使用 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

上面的代码给了我非常通用的参数异常。

为上述代码编写反射的编写方式是什么?

4

1 回答 1

1

正如评论中所说:

请注意,这externTBrokerService[0]是 aType而不是该类型的实例。

有了这个,我觉得有必要将其他评论的感觉作为我的答案的一部分。

Type iTBroker = externITBroker[12];

这是错误的!迟早这将无法找到您的类型,因为此集合中类型的顺序未确定并且可能会更改。你应该这样做:

Type iTBroker = externITBroker.Single(x => x.Name == "ITBroker");

这远非万无一失,因此请确保该条件为您提供独特的结果。

或者直接加载该类型(假设这是您的类型的 AssemblyQualifiedName):

Type.GetType("Business.ITBroker, Business");

要在您的类型上查找方法,有一个方法Type.GetMethod,其重载之一足以找到您的方法。

要创建需要作为参数传递的类型的实例,您可以使用

Activator.CreateInstance(brokerServiceType);
于 2013-07-15T09:23:56.873 回答