2017-02-16 42 views
1

在我的C#项目我正在使用第三方软件的类型库来沟通该软件。但是当有人使用旧版本的第三方软件时,我必须加载另一个类型库(一个较旧的),我该如何处理?不同类型的库为不同的版本

而接下来的事情是,在该类型库中可能会有一些变化,所以我的实际代码不工作(也许!)

+0

当你说“类型库”时,你的意思是一个COM库吗?如果按照指导原则正确设计,您只需要使用所需的最低版本界面并使用该界面,而不需要进行杂耍。 – Luaan

回答

2

首先,你应该创建一个接口,它包装的功能您第三方图书馆。如果你这样做,你可以有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

+0

好吧,所以我需要为每个版本实现一个包装,如“ThirdPartyV2Wrapper,ThirdPartyV3Wrapper”? –

+0

是的,至少我是这样做的,当我与第三方库合作。为我工作得很好:) –

+0

如果我能够回答你的问题,我会很高兴,如果你接受答案:) –