从其他公开类的程序集

时间:2013-10-30 17:26:12

标签: c# .net visual-studio dll .net-assembly

我有第三方A1.dll,A2.dll和AClass类。 我从我的B1和B2 dlls中引用它,但我想以另一种方式: 我希望我的X.dll使用A1 + A2和B1,B2使用X.重要的是所有名称空间和类在X和A1 + A2中应该是相同的。

修改 X应该是我的A1,A2副本 - 我甚至可以使用X1,X2。然后我可以使用A1,A2的一个许可证 - 用于X,而不是我将来会使用的所有exec和dll。

2 个答案:

答案 0 :(得分:2)

因此,如果我理解正确,您希望X.DLL代表第三方DLL。您可以使用Adapter pattern来实现此目的。您希望保留所有名称空间和类的事实非常可怕。那些碰撞将会非常麻烦。您可能不得不诉诸using aliasing directives以保持一定程度的理智。 (如果你控制了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)

enter image description here

答案 1 :(得分:0)

你的意思是:A1.dll& A2.dll在同一名称空间中定义了相同的类型名称,当你想要引用A1和A1时,你会遇到麻烦。 X.dll中的A2并使用这两种类型中的一种?

要解决此问题,您可以使用“extern别名”。这是C#的一个非常未知的特性:

在你的dll上添加一个extern别名(右键单击程序集的引用 - >属性)

extern alias

然后,在.cs文件的顶部,只需输入:

extern alias myAlias;
using okType = myAlias::DuplicateNamespace.DuplciateType;

并在代码中使用它:

var my = new okType();

ps:如果我误解你,我的回答可能无关紧要:)