2015-04-02 31 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

相关问题