创建与反射类型匹配的方法

本文关键字:方法 类型 反射 创建 | 更新日期: 2023-09-27 18:18:25

我正在使用第三方。net dll,我正在呼叫。我正在简化我的代码,但它是这样的。

// The assembly has already been loaded into 'ass'
Type params = ass.GetType("RemoteCalls.ParametersDelegate");
Delegate UseDel = Delegate.CreateDelegate(params, this, "MyGetParams");

我可以把这个委托(UseDel)传递给反射对象,它会在需要的时候调用MyGetParams。

我遇到的问题是方法签名是由第三方dll中的类型组成的。

ParametersDelegate的签名是…

Parameters GetPars();

所以,我的方法不能返回正确的类型(参数)。我试过以下方法

private static class OtherDelegates<T>
{
    public static T MyGetParams()
    {
        //... code to build up the 'Parameters' class, and return it.
    }
}

然后调用. .

Delegate UseDel = Delegate.CreateDelegate(params, this, "OtherDelegates<xxx>.MyGetParams");

但是我不知道在"xxx"里写什么。

我认为我可以通过使用CodeDomProvider来做到这一点,但想知道是否有更简单的方法?

此外,由于许可问题,不能将DLL添加为引用。

谢谢富有。

创建与反射类型匹配的方法

我会将第三方dll完全封装在您控制的库dll后面,使用接口上的第三方类型的none。这意味着您可以单独引用(已构建的)库dll。显然,你仍然需要以一种方式编码,当第三方dll不可用时,它会优雅地失败。

这也有副作用:

  • 你可以模拟实现来测试
  • 你可以提供一个后备策略,第三方dll不存在
  • 你可以支持多个供应商

我已经非常成功地使用了上面的方法,例如用一个大弧回退包装MapPoint(地理路由)。

另外,你不需要乱搞反射!