0

我有 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。

4

2 回答 2

2

因此,如果我理解正确,您希望 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)

在此处输入图像描述

于 2013-10-30T17:39:39.097 回答
0

您的意思是: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:如果我误解了你,我的回答可能无关紧要:)

于 2013-10-30T18:05:38.543 回答