单线问题没有意义,所以让我详细说明我的挑战:
我创建了3个DLL( MyUtils,MyConnector,MyAgent ),每个DLL都包含自己的一组“内部”类,类型和成员。所有类,类型和成员都是它们各自的默认命名空间(与它们的程序集名称相同)。
MyAgent需要添加对MyConnector的引用并使用它的一些类。 MyConnector需要添加对MyUtils的引用并使用它的一些类。 就目前而言,MyAgent可能还需要访问MyUtils中的某些类型。
现在,由于MyUtils中的所有类型和成员都是内部的,我无法将其添加为MyConnector的引用,同样也可以从MyConnector添加到MyAgent。我不想公开任何这些类型,因为我不希望使用我的DLL的应用程序直接访问它们。
据我所知,理论上可以在多个程序集上跨越命名空间,但不清楚如何实际实现上述场景。
最后,我想部署MyAgent.dll以在EXE中使用。 EXE应该只能访问MyAgent中的公共类型,但有一个例外:MyConnection对象(MyConnector中包含的类型)将从MyAgent方法返回。在这里,我的访问说明符(内部)限制了这种可能性。
我一直在过度思考这一点,以至于我现在完全糊涂了。非常感谢有经验的程序员的一些指导。
提前致谢。
答案 0 :(得分:4)
跨多个程序集跨越命名空间非常简单:
程序集1中的file1.cs:
namespace MyNamespace { ... }
assembly2中的file2.cs:
namespace MyNamespace { ... }
然而,这根本无法帮助您,因为intenal
access-modifier将使您的成员对同一程序集中的任何类都可见,无论其名称空间如何。因此,即使在assembly1中有两个名称空间,您也可以访问assembly1.MyNamespace
中声明的所有内部成员,但不能访问assembly2.MyNamespace
中的所有内部成员。
所以你 使它们public
以便从其他程序集中访问它们。或者你也可以命名一个所谓的“朋友组装”,它也可以从另一个组件访问内部成员。为此,请在代码中添加InternalsVisibleTo(fullNameForAssembly2)
。