Когда следует использовать [assembly: InternalsVisibleTo ()]? - PullRequest
14 голосов
/ 19 июля 2010

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

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

Ответы [ 3 ]

14 голосов
/ 19 июля 2010

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

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

7 голосов
/ 20 июля 2010

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

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

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

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

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

6 голосов
/ 19 июля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...