我正在使用第三方.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添加为参考。
由于 丰富。
答案 0 :(得分:2)
我会使用界面上第三方类型的 none 将第三方dll完全封装在您控制的库dll后面。这意味着您可以单独引用(已构建的)库dll。显然,当第三方dll不可用时,你仍然需要以一种优雅的方式编写代码。
这也有附带的好处:
我已经非常成功地使用了上述内容,例如将MapPoint(地理路由)与大弧回退包装在一起。
另外 - 你不需要乱用反射!