Когда должен [блок: InternalsVisibleTo ()] использоваться?

Я понимаю, что атрибут InternalVisibleTo используется для представления типов и методов с внутренним модификатором доступа к указанному блоку. Я только когда-либо использовал это для представления внутренних методов к отдельному блоку, содержащему комплект модульных тестов.

Я изо всех сил пытаюсь думать о другом сценарии, когда это должно использоваться. Этот атрибут был представлен конкретно для помощи поблочному тестированию или был там другой причиной?

14
задан Marcel 19 March 2013 в 11:50
поделиться

3 ответа

Сценарий может заключаться в том, что у вас есть разделение логики между сборками (например, внутренние объекты данных и логический уровень). Вы не хотите предоставлять классы своим пользователям, но вы все равно хотите использовать объекты в своих собственных сборках.

Я думаю, что это не очень распространенный сценарий, я почти никогда не использую InternalsVisibleTo в контексте не модульных тестов.

14
ответ дан 1 December 2019 в 09:59
поделиться

Помимо тестирования, единственный другой сценарий, который я когда-либо использовал атрибут InternalsVisibleTo , был при создании сборок сериализации.

Кроме этого, я никогда не использовал и не нуждался в этом.

6
ответ дан 1 December 2019 в 09:59
поделиться

Этот сценарий похож на сценарий Елисея, но направлен на обеспечение правильного использования вашей доменной модели в Domain-driven design.

Допустим, у вас есть сборка MyProject.Core, которая содержит все ваши доменные модели. Если вы не хотите, чтобы другие люди непосредственно создавали экземпляры ваших доменных моделей, вы можете сделать конструкторы внутренними.

Другая сборка, называемая MyProject.Services, содержит доменные службы, которые специализируются на создании действительных доменных объектов. Эта сборка будет иметь ссылку на MyProject.Core. Атрибут InternalsVisibleTo используется для предоставления сборке доменной службы доступа к внутренним конструкторам.

Другим преимуществом ссылки с MyProject.Services на MyProject.Core является то, что она запрещает объектам домена сохранять любые ссылки на доменные службы, что считается еще одной хорошей практикой DDD.

Примечание: Я никогда не применял вышеприведенный сценарий на практике, поэтому он может быть не совсем точным на уровне DDD. Но это использование InternalsVisibleTo, которое я смог придумать и которое не связано с модульными тестами.

7
ответ дан 1 December 2019 в 09:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: