我有 AClass 类的 3rdparty A1.dll、A2.dll。我从我的 B1 和 B2 dll 中引用它,但我想以另一种方式使用它:我想让我的 X.dll 使用 A1+A2 和 B1,B2 使用 X。重要的是所有命名空间和类都应该相同在 X 和 A1+A2 中。
编辑: X 应该是我的 A1、A2 副本——我什至可以使用 X1、X2。然后我可以使用 A1、A2 的一个许可证 - 用于 X,而不是用于我将来会使用的所有 exec&dll。
我有 AClass 类的 3rdparty A1.dll、A2.dll。我从我的 B1 和 B2 dll 中引用它,但我想以另一种方式使用它:我想让我的 X.dll 使用 A1+A2 和 B1,B2 使用 X。重要的是所有命名空间和类都应该相同在 X 和 A1+A2 中。
编辑: X 应该是我的 A1、A2 副本——我什至可以使用 X1、X2。然后我可以使用 A1、A2 的一个许可证 - 用于 X,而不是用于我将来会使用的所有 exec&dll。
因此,如果我理解正确,您希望 X.DLL 代表第 3 方 DLL。您可以使用适配器模式来实现这一点。您想要保留所有名称空间和类的事实非常可怕。这些碰撞会很麻烦。您可能不得不求助于使用别名指令来保持一定程度的理智。(如果您可以控制 B.DLL 和 X.DLL,为什么要这样做?)
这里所说的是 X.DLL 适配器的一种模式,它不使用冲突命名方案......
class Adapter: IAdapter//Adapter is a member of X.DLL
{
public AClass aClassMember = new AClass();//A.DLL or A2.DLL member
public void ExposeAClass() {};
}
然后你可以从 B.DLL 引用 X.DLL。
class BClass
{
public IAdapter myAdapter = new Adapter();//Access X's adapter to expose A. Could take a step further with dependency injection...
}
依赖关系图看起来像这样(提供或获取interfaces.dll)
您的意思是:A1.dll 和 A2.dll 在同一个命名空间中定义了相同的类型名称,而当您想在 X.dll 中同时引用 A1 和 A2 并使用这两种类型中的一种时,您会遇到麻烦吗?
为了解决这个问题,您可以使用“外部别名”。这是 C# 的一个鲜为人知的特性:
在你 ant 的 dll 上添加一个外部别名(右键单击程序集的引用 -> 属性)
然后,在.cs 文件的顶部,只需输入:
extern alias myAlias;
using okType = myAlias::DuplicateNamespace.DuplciateType;
并在代码中使用它:
var my = new okType();
ps:如果我误解了你,我的回答可能无关紧要:)