Estoy usando el ejemplo de Registry DSL para configurar structuremap. Pero al hacer esto, todos mis tipos registrados están disponibles en todas las capas de mi aplicación, donde agrego una referencia al mapa de la estructura. No quiero que mi capa de negocios sepa nada sobre mi capa de acceso a datos y viceversa. ¿Cómo obtengo structuremap para que solo registre tipos específicos para cada una de mis capas?Structuremap - Cómo registrar ciertos tipos en ciertas capas
Este es el código en mi archivo Global.asax:
ObjectFactory.Initialize(x =>
{
x.AddRegistry<RegistryIOC>();
});
Y aquí es mi clase RegistryIOC:
public class RegistryIOC : SMRegistry
{
public RegistryIOC()
{
For<IProfileService>.Use<ProfileService>();
For<IProctorService>().Use<ProctorService>();
//Business Logic Objects
For<IQual>().Use<Qual>();
For<ITest>().Use<Test>();
For<IBoldface>().Use<Boldface>();
For<ITrainingPlan>().Use<TrainingPlan>();
For<IUnit>().Use<Unit>();
//Data Transfer Objects
For<IGenericDTO>().Use<GenericDTO>();
For<IProfileDTO>().Use<ProfileDTO>();
For<IQualDTO>().Use<QualDTO>();
For<IPermissionDTO>().Use<PermissionDTO>();
//Repository Objects
For<IProctorRepository>().Use<ProctorRepository>();
For<IQualsRepository>().Use<QualsRepository>();
For<ITestRepository>().Use<TestRepository>();
For<IUnitRepository>().Use<UnitRepository>();
For<IUserRepository>().Use<UserRepository>();
}
}
Gracias por la ayuda.
¿De qué tipo de capas está hablando? Diferentes procesos? Diferentes máquinas?Si todos se ejecutan en el mismo proceso, probablemente hagas lo que tu capa empresarial sabe * un poco * sobre tu capa de datos, específicamente su interfaz. No está claro qué problema está tratando de resolver. ¿Qué pasa con su clase RegistryIOC? –
Tenemos una capa de servicio, BLL y DAL, que son todos proyectos independientes. Cada proyecto hace referencia a StructureMap. La capa de servicio conoce las otras dos capas, pero el BLL y el DAL no se conocen entre sí. No quiero que otros desarrolladores hagan uso de Business Objects desde dentro del DAL y viceversa. No quiero que los desarrolladores hagan uso de Objetos del repositorio dentro del BLL. La capa de servicio orquesta todo eso. Por lo tanto, al registrar todos los tipos de esta manera, todos los objetos están disponibles en todas nuestras capas (proyectos). –
Bueno, * no * agrega una referencia a StructureMap desde cualquier otra capa que la raíz de composición ... –