2010-07-19 22 views
14

Entiendo que el atributo InternalVisibleTo se usa para exponer tipos y métodos con el modificador de acceso interno a un ensamblado especificado. Solo he usado esto para exponer los métodos internos a un ensamblaje separado que contiene un conjunto de pruebas unitarias.¿Cuándo se debe usar [assembly: InternalsVisibleTo()]?

Estoy luchando por pensar en otro escenario cuando esto debería usarse. ¿Este atributo se introdujo específicamente para las pruebas de unidades de ayuda o hubo alguna otra razón?

Respuesta

14

Un escenario puede ser que tiene separación de lógica entre los ensamblajes (como los objetos de datos internos y la capa lógica). No desea exponer las clases a sus usuarios, pero aún desea usar los objetos en sus propios ensamblajes.

Creo que este no es un escenario muy común, casi nunca uso InternalsVisibleTo en contexto de pruebas no unitarias.

+1

Estoy de acuerdo. Solo lo uso en escenarios de pruebas unitarias, pero el escenario que describes es razonable. – Steven

6

Además de las pruebas, el único otro escenario en el que he usado el atributo InternalsVisibleTo fue cuando creé ensamblajes de serialización.

Aparte de eso, nunca he usado, ni lo necesitaba.

7

Este escenario es similar al de Elisha's, pero tiene como objetivo imponer el uso correcto de su modelo de dominio en Domain-driven design.

Digamos que tiene un conjunto MyProject.Core, que contiene todos sus modelos de dominio. Si no desea que otras personas creen directamente instancias de sus modelos de dominio, puede crear los constructores internal.

Otro ensamblaje, llamado MyProject.Services, contiene servicios de dominio que están especializados en la creación de objetos de dominio válidos. Este conjunto tendrá una referencia al MyProject.Core. El atributo InternalsVisibleTo se usa para otorgar acceso al conjunto de servicios de dominio a los constructores internal.

Otro beneficio de la referencia de MyProject.Services a MyProject.Core es que no permite que los objetos de dominio guarden referencias a servicios de dominio, lo que se considera una buena práctica de DDD.

Nota: Nunca he aplicado el escenario anterior en la práctica, por lo que puede no ser completamente preciso en el nivel de DDD. Pero este es un uso de InternalsVisibleTo que pude pensar, que no está relacionado con la unidad de prueba.

Cuestiones relacionadas