繁体   English   中英

从其他公开类的程序集

[英]Assembly that expose classes from other

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

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

因此,如果我理解正确,您希望X.DLL代表第三方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并使用这两种类型中的一种时,你会遇到麻烦吗?

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

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

别名

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

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

并在代码中使用它:

var my = new okType();

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM