Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何离散定义我的程序集类型的可见性?_C#_.net_Types_Visibility_.net Assembly - Fatal编程技术网

C# 如何离散定义我的程序集类型的可见性?

C# 如何离散定义我的程序集类型的可见性?,c#,.net,types,visibility,.net-assembly,C#,.net,Types,Visibility,.net Assembly,我正在使用.NET 4.5.2,需要从程序集B访问程序集a中定义的ClassA,但希望将ClassA声明为内部,以避免其他程序集访问它 我不希望使用InternalsVisibleTo,因为我不希望所有组件A类型的内部端都暴露给组件B 总结:我需要离散定义我的程序集类型的可见性。可能吗 编辑:与我需要的非常相似,但我只是不希望类型是公共的,因为我也希望它们在编译时隐藏起来。是否可以将类A单独移动到新项目中?然后,您可以从项目B引用项目A,其他项目/程序集将不会看到它 如果这是不可能的,那么我同意

我正在使用.NET 4.5.2,需要从程序集B访问程序集a中定义的ClassA,但希望将ClassA声明为内部,以避免其他程序集访问它

我不希望使用InternalsVisibleTo,因为我不希望所有组件A类型的内部端都暴露给组件B

总结:我需要离散定义我的程序集类型的可见性。可能吗


编辑:与我需要的非常相似,但我只是不希望类型是公共的,因为我也希望它们在编译时隐藏起来。

是否可以将类A单独移动到新项目中?然后,您可以从项目B引用项目A,其他项目/程序集将不会看到它

如果这是不可能的,那么我同意Eric的观点,设计似乎不正确。这就像有了这个标准的项目结构:

project Entity
project Database
project Server
project UserInterface

但在您的例子中,您将实体和数据库集在一起。因此,当用户界面需要使用实体时,它还必须包含无用的数据库代码。

您试图这样做的事实表明您的设计存在架构缺陷。为什么一开始就有两个集会?@EricLippert完全不同意你的观点。这并不是简单的解释,为什么我需要将访问另一个程序集的权限分散给一个程序集的类,但基本上与DDD分层体系结构以及一些域重构工厂需要从基础架构层而不是应用程序层访问这一事实有关,有些创建工厂只能从应用程序层访问,而不能从基础结构层访问。这只是一个例子。为了让你们对我的设计有一个正确的看法,我已经向你们解释了更多关于它的内容,这在本文中有点离题了。我只是想确保我的设计没有解决技术问题的方案。如果您了解DDD,您可能会了解我的设计:域定义构造函数和创建工厂都在不同的层(基础设施和应用程序)中使用,因此域层需要将这两种类公开给不同的层。我不想就我的设计发起讨论,那将是一个离题。当然可以,但不可能将物理域项目拆分为域、基础设施和域、应用程序项目吗?它们仍然会形成一个单一的域层,但您可以通过这种方式控制可见性。当然,但是我会将我的域层拆分为不同的程序集(包括所有维护成本),只是为了解决“不可能离散地公开到某些程序集我的类型”的技术问题。我们已经以这种方式建模了,并且我们以大量额外的程序集结束,这就是为什么我要问这个问题,我不是在寻求建议来重新定义我的体系结构,或者如何使用微不足道的.NET概念来实现它,而是为了解决这个特定的技术问题,尽管如此,我还是非常感谢您的帮助。谢谢你。我完全理解,当人们试图通过告诉你来解决问题时,我真的很恼火。但在这种情况下,特别是我觉得没有技术解决方案,所以我的评论是在找不到解决方案的情况下。您可能已经检查了用于测试的特殊属性,这些属性有时可用于深入部件的隐藏部分。如果这个问题很重要,我建议您尝试发布一个简化的项目结构,使用DDD的一些小工厂方法,以具体的方式显示问题。再次感谢您,我非常感谢您的帮助。我将检查用于测试的特殊属性,我不考虑;)再次感谢你!