在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静态属性。

谢谢!

在C#中使用反射时,如何将接口指定为泛型类型参数

Type _ImplBase = Type.GetType("Epicor.ServiceModel.Channels.ImplBase`1[[Erp.Contracts.JobEntrySvcContract, Assembly2]], Assembly1");

假设Epicor。ServiceModel。频道。ImplBase是在Assembly1和Erp中定义的。合同。Assembly2中的JobEntrySvcContract。