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