2017-02-16 41 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

如果我能夠回答你的問題,我會很高興,如果你接受答案:) –