我在项目中引用了一个外部程序集 (dll),并且该程序集有多个版本。
问题是程序集更改了一些类名,并且在使用它们时出现了运行时错误。例如,在某些版本中,类名称为
BipedDriver
,而其他版本则为 BipedMaster
。
问题:是否可以使用不同名称的类并决定何时使用它?例如,如果参考程序集版本为 1000,则类名称为
BipedDriver
,否则为 BipedMaster
?
使用您自己的特定于域的命名来包装和抽象依赖项。
例如,创建您自己的接口,公开您需要依赖项执行的操作:
public interface IBiped
{
// define your own method names here
}
并创建两个实现(或者您喜欢的任意多个实现):
public class MyBipedMaster : IBiped
{
// implement your interface using "BipedMaster"
}
public class MyBipedDriver : IBiped
{
// implement your interface using "BipedDriver"
}
然后在整个领域逻辑中,所有内容都可以简单地引用
IBiped
的实例。无论何时/无论您有逻辑来确定要使用哪个实现,您都可以提供该实现。一个简单的例子可能是:
public class BipedFactory
{
public static IBiped Create(bool someCondition)
{
if (someCondition)
return new MyBipedDriver();
else
return new MyBipedMaster();
}
}
使用代码永远不需要知道哪个是哪个:
var biped = BipedFactory.Create(someCondition);
如何抽象
someCondition
取决于您。例如,也许不是将其传递给工厂,而是由工厂内部决定。或者您可能根本不使用显式工厂,而是将此逻辑构建到您正在使用的任何依赖项注入系统中,以便它知道将哪个实现注入到任何需要它的对象中。