14

我了解InternalVisibleTo属性用于将具有内部访问修饰符的类型和方法公开给指定的程序集。我只使用它来将内部方法暴露给包含一套单元测试的单独程序集。

我正在努力考虑应该使用它的另一种情况。这个属性是专门为了帮助单元测试而引入的,还是有其他原因?

4

3 回答 3

14

一种情况可能是您在程序集之间分离逻辑(如内部数据对象和逻辑层)。您不想将类公开给您的用户,但您仍想在您自己的程序集中使用这些对象。

我认为这不是一个非常常见的场景,我几乎从未InternalsVisibleTo在非单元测试环境中使用过。

于 2010-07-19T09:01:50.460 回答
7

此方案类似于Elisha 的方案,但旨在强制在域驱动设计中正确使用您的域模型。

假设您有一个MyProject.Core包含所有域模型的程序集。如果您不希望其他人直接创建您的领域模型的实例,您可以制作 constructors internal

另一个名为MyProject.Services的程序集包含专门用于创建有效域对象的域服务。此程序集将引用MyProject.Core. 该InternalsVisibleTo属性用于授予域服务程序集对internal构造函数的访问权限。

引用 from MyProject.Servicesto的另一个好处MyProject.Core是它不允许域对象保留对域服务的任何引用,这被认为是另一个好的 DDD 实践。

注意:我在实践中从未应用过上述场景,因此在 DDD 层面上可能并不完全准确。但这是InternalsVisibleTo我能想到的用途,与单元测试无关。

于 2010-07-19T21:08:45.527 回答
6

除了测试之外,我曾经使用过该InternalsVisibleTo属性的唯一其他场景是在创建序列化程序集时。

除此之外,我从未使用过,也不需要它。

于 2010-07-19T09:35:10.997 回答