我正在使用第三方。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(地理路由)。
另外,你不需要乱搞反射!