2015-02-06 53 views
1

我使用从组件B中的.NET 4.5.2和需要访问一个ClassA的在组件A中定义,但要声明ClassA的内部,以避免来自其它组件访问它。我的组件类型的离散定义可见度如何?

我不想使用InternalsVisibleTo因为我不希望所有的组件中的类型的内部露底向大会B.

汇总:我需要分散定义我的组件类型的可见性。那可能吗?

编辑:StrongNameIdentityPermissionAttribute与我所需要的非常相似,但我不想让这些类型公开,因为我希望它们在编译时也隐藏起来。

+4

您试图这样做的事实表明您的设计存在架构缺陷。为什么首先有两个组件? – 2015-02-06 02:46:51

+0

@EricLippert完全不同意你的看法。这不是微不足道的解释为什么我需要分离地访问另一个程序集的类到一个程序集的类,但基本上与DDD分层体系结构有关,以及某些Domain * Reconstruction Factories需要从基础结构层访问而不是从应用层和一些*创建工厂*只需要从应用层访问,而不是从基础设施层访问。这只是一个例子。 – 2015-02-06 02:58:07

回答

2

是否可以将A类自行移出新项目?然后,您可以引用项目B中的项目A,并且没有其他项目/组件会看到它。

如果这是不可能的,那么我同意埃里克认为设计看起来不正确。这将是就像这个标准的项目结构:

project Entity 
project Database 
project Server 
project UserInterface 

,但在你的情况你结块说实体和数据库一起。所以当UserInterface需要使用实体时,它也必须包含无用的数据库代码。

+0

如果你对我的设计有一个正确的看法,我已经向你解释了更多关于它的信息,在这种情况下,这是一种无关紧要的话题。我只是想确保不存在我遇到的技术问题的解决方案,因为我的设计。如果您了解DDD,您可以了解一些关于我的设计的知识:域定义构造函数和创建工厂都在不同的层(基础结构和应用程序)中使用,因此域层需要将两种类都暴露给不同类型的层。我不想发起关于我的设计的讨论,那将是一个无关紧要的话题。 – 2015-02-06 15:36:41

+0

当然,但仅仅将物理域项目拆分为Domain.Infrastructure和Domain.Application项目是不可能的?他们仍然会形成一个单一的域名层,但您可以通过这种方式控制可见性。 – LegendLength 2015-02-07 01:30:44

+0

当然,但是接下来我会在不同的程序集中拆分我的域图层(具有维护中的所有成本),只是为了解决“不能将某些程序集分散暴露给我的类型”的技术问题。我们已经以这种方式对事物进行了建模,并且以很多额外的程序集结束,这就是为什么我问这个问题,我没有寻找建议来重新定义我的架构,或者如何使用微不足道的.NET概念来实现它,而是要解决那个具体的技术问题,我仍然非常感谢你的帮助。谢谢。 – 2015-02-07 02:45:50