在我的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