在C#中使用反射时,如何将接口指定为泛型类型参数
本文关键字:接口 泛型类型参数 反射 | 更新日期: 2023-09-27 18:14:28
我正试图使用反射来实例化一个类型,该反射将契约作为泛型类型参数。如果它是一个泛型类型方法,我可以使用。MakeGenricMethod方法,并指定反射的类型。但是,如果类型本身不是泛型的,我该如何将接口指定为约定呢?
这就是正常加载程序集时代码的样子:
Ice.Lib.Framework.WCFServiceSupport.CreateImpl<Erp.Proxy.BO.JobEntryImpl>(EpicorSession, Epicor.ServiceModel.Channels.ImplBase<Erp.Contracts.JobEntrySvcContract>.UriPath);
我被困在"Epicor.ServiceModel.Channels.ImplBase"部分。
我需要具体说明Erp。合同。JobEntrySvcContract接口,或者类无法正确实例化。然后我需要抓住它。UriPath属性,并将其插入到我的CreateImpl方法中。
以下是我对该部分的了解:
Type _ImplBase = asmEpicorServiceModel.GetType("Epicor.ServiceModel.Channels.ImplBase");
FieldInfo UriPath = _ImplBase.GetField("UriPath", BindingFlags.GetField | BindingFlags.Public | BindingFlags.Static);
问题是,_ImplBase返回null,我认为这是因为我没有将接口指定为约定,所以它失败了。
public class ImplBase<TContract> : ImplBase where TContract : class
{
public static readonly string UriPath;
最终,我需要获取UriPath静态属性。
谢谢!
Type _ImplBase = Type.GetType("Epicor.ServiceModel.Channels.ImplBase`1[[Erp.Contracts.JobEntrySvcContract, Assembly2]], Assembly1");
假设Epicor。ServiceModel。频道。ImplBase是在Assembly1和Erp中定义的。合同。Assembly2中的JobEntrySvcContract。