When should [assembly: InternalsVisibleTo()] be used?

不问归期 提交于 2019-11-28 10:55:53

A scenario can be that you have separation of logic between assemblies (like internal data objects and the logic layer). You don't want to expose the classes to your users, but you still want to use the objects in your own assemblies.

I think this is not a very common scenario, I hardly ever use InternalsVisibleTo in non unit tests context.

Niels van der Rest

This scenario is similar to that of Elisha's, but is targeted at enforcing correct use of your domain model in Domain-driven design.

Let's say you have an assembly MyProject.Core, which contains all of your domain models. If you don't want other people directly creating instances of your domain models, you can make the constructors internal.

Another assembly, called MyProject.Services, contains domain services that are specialized in creating valid domain objects. This assembly will have a reference to MyProject.Core. The InternalsVisibleTo attribute is used to grant the domain service assembly access to the internal constructors.

Another benefit of the reference from MyProject.Services to MyProject.Core is that it disallows the domain objects to keep any references to domain services, which is considered another good DDD practice.

Note: I have never applied the above scenario in practice, so it may not be completely accurate on the DDD level. But this is a use of InternalsVisibleTo that I could think of, that isn't unit test related.

Apart from testing, the only other scenario I've ever used the InternalsVisibleTo attribute, was when creating serialization assemblies.

Other than that, I've never used, nor needed it.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!