在我的C#项目我正在使用第三方软件的类型库来沟通该软件。但是当有人使用旧版本的第三方软件时,我必须加载另一个类型库(一个较旧的),我该如何处理?不同类型的库为不同的版本
而接下来的事情是,在该类型库中可能会有一些变化,所以我的实际代码不工作(也许!)
在我的C#项目我正在使用第三方软件的类型库来沟通该软件。但是当有人使用旧版本的第三方软件时,我必须加载另一个类型库(一个较旧的),我该如何处理?不同类型的库为不同的版本
而接下来的事情是,在该类型库中可能会有一些变化,所以我的实际代码不工作(也许!)
首先,你应该创建一个接口,它包装的功能您第三方图书馆。如果你这样做,你可以有2个接口的实现。每个版本的第三方库一个。
public interface IWrapThirdParty {
void ThirdPartyMethodOne();
int ThirdPartyMethodTwo();
}
public class ThirdPartyV1Wrapper : IWrapThirdParty {
public void ThirdPartyMethodOne() {
ThirdPartyV1 obj = new ThirdPartyV1();
obj.ThirdPartyMethodOne();
}
public int ThirdPartyMethodTwo(){
ThirdPartyV1 obj = new ThirdPartyV1();
return obj.ThirdPartyMethodTwo();
}
}
要与装载库解决您的问题:
您可以使用Assembly.Load()方法U想通了之后,ü要加载的版本。但请注意永远不要加载组件2次。
https://msdn.microsoft.com/en-us/library/system.reflection.assembly.load(v=vs.110).aspx
要检查组件加载媒体链接ü可以使用的AppDomain.CurrentDomain.GetAssemblies()方法,将返回当前加载到AppDomain中的所有组件。
https://msdn.microsoft.com/en-us/library/system.appdomain.getassemblies(v=vs.110).aspx
好吧,所以我需要为每个版本实现一个包装,如“ThirdPartyV2Wrapper,ThirdPartyV3Wrapper”? –
是的,至少我是这样做的,当我与第三方库合作。为我工作得很好:) –
如果我能够回答你的问题,我会很高兴,如果你接受答案:) –
当你说“类型库”时,你的意思是一个COM库吗?如果按照指导原则正确设计,您只需要使用所需的最低版本界面并使用该界面,而不需要进行杂耍。 – Luaan