我了解InternalVisibleTo属性用于将具有内部访问修饰符的类型和方法公开给指定的程序集。我只使用它来将内部方法暴露给包含一套单元测试的单独程序集。
我正在努力考虑应该使用它的另一种情况。这个属性是专门为了帮助单元测试而引入的,还是有其他原因?
我了解InternalVisibleTo属性用于将具有内部访问修饰符的类型和方法公开给指定的程序集。我只使用它来将内部方法暴露给包含一套单元测试的单独程序集。
我正在努力考虑应该使用它的另一种情况。这个属性是专门为了帮助单元测试而引入的,还是有其他原因?
一种情况可能是您在程序集之间分离逻辑(如内部数据对象和逻辑层)。您不想将类公开给您的用户,但您仍想在您自己的程序集中使用这些对象。
我认为这不是一个非常常见的场景,我几乎从未InternalsVisibleTo
在非单元测试环境中使用过。
此方案类似于Elisha 的方案,但旨在强制在域驱动设计中正确使用您的域模型。
假设您有一个MyProject.Core
包含所有域模型的程序集。如果您不希望其他人直接创建您的领域模型的实例,您可以制作 constructors internal
。
另一个名为MyProject.Services
的程序集包含专门用于创建有效域对象的域服务。此程序集将引用MyProject.Core
. 该InternalsVisibleTo
属性用于授予域服务程序集对internal
构造函数的访问权限。
引用 from MyProject.Services
to的另一个好处MyProject.Core
是它不允许域对象保留对域服务的任何引用,这被认为是另一个好的 DDD 实践。
注意:我在实践中从未应用过上述场景,因此在 DDD 层面上可能并不完全准确。但这是InternalsVisibleTo
我能想到的用途,与单元测试无关。
除了测试之外,我曾经使用过该InternalsVisibleTo
属性的唯一其他场景是在创建序列化程序集时。
除此之外,我从未使用过,也不需要它。