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

时间:2011-12-21 12:47:14

标签: c# .net reflection delegates codedom

我正在使用第三方.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添加为参考。

由于 丰富。

1 个答案:

答案 0 :(得分:2)

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

这也有附带的好处:

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

我已经非常成功地使用了上述内容,例如将MapPoint(地理路由)与大弧回退包装在一起。

另外 - 你不需要乱用反射!