2015-04-02 32 views
0

我想知道,任何人都可以給我如何設計這個方案的提示:如果相同的方法必須使用不同版本的引用,如何設計C#應用程序?

在C#中,程序A被調用的引用程序集B的方法。然而,後來該程序集B的代碼被改變,而這種方法被重命名到其他東西像D.如何程序工作,以支持不同版本的程序集B,而不建立兩個不同版本的程序A?

反射是唯一的出路嗎?任何其他建議?我對IoC不熟悉,但可以解決這個問題嗎?

+0

是程序集B源代碼在您的訪問?還是超出你的範圍? – CarbineCoder 2015-04-02 09:46:37

+0

它仍然是一個內部組件,但在我的情況下,它超出了我的團隊的範圍。所以我們無法更新它。 – mting923 2015-04-02 16:32:23

回答

1

當然,使用一個類的引用不同版本的相同程序集根本不可能(甚至在一個程序集中)。嘗試考慮碰撞類名,因爲它們看起來是相同的,即使它們有不同的實現。 所以我建議堆疊到一個版本,並使用適配器模式(在不同的程序集)或其他工藝來解決您的問題。

實際上,使用不同版本的相同程序集總是很痛苦,我強烈建議不要這樣。

+0

謝謝。我想我有關於如何使用適配器模式的想法。但看起來我仍然需要實現反射,以便'選擇'在這種情況下沒有編譯器錯誤的版本? – mting923 2015-04-02 16:33:49

+0

是的,反射基本上是唯一的方法,如果你想引用一個程序集的兩個不同版本。但是,您仍然無法從這些程序集中「導出」類型,這意味着您不能將這些類型用作方法的返回類型,因爲編譯器需要強類型來返回類型和參數。你可以在這裏做的唯一事情 - 在方法內部用反射來做所有的事情,並在外面返回一些已知的類型。 – Yura 2015-04-02 16:58:02

+0

但是,正如我上面提到的那樣,如果在程序集的外部使用適配器模式**,那麼您可以按照上面提到的相同限制(返回類型或參數)進行操作,但是完全沒有反射。讓我解釋。假設組件「A」是你的工作組件,而組件「B」是一個,它有不同的版本。現在創建程序集「C」,引用程序集「B」的其他版本,使用「B」中的代碼並暴露於任何內容之外,但代碼來自「B」。在「A」中使用組件「C」之後。這樣「A」和「C」將與不同版本的相同組件一起工作。 – Yura 2015-04-02 17:02:17

相關問題