2012-08-06 15 views
5

¿Es una mala práctica o un olor codificado utilizar un contenedor IoC al instalar dependencias?¿Es una mala práctica o un olor codificado utilizar un contenedor IoC al instalar dependencias?

Esta es mi composición de la raíz:

public void Install(IWindsorContainer container, IConfigurationStore store) 
{ 
    Assembly modelAssembly = typeof(UserLoginModel).Assembly; 
    Assembly controllerAssembly = typeof(HomeController).Assembly; 

    container.Install(
     new MvcInfrastructureInstaller(modelAssembly, viewAssembly, controllerAssembly, applicationTitle, resourceAssemblyLocations), 
     new MiniMembershipInstaller(), 
     new ServiceInstaller(), 
     new RepositoryInstaller(), 
     new LibraryInstaller(), 
     new AutoMapperProfileInstaller() // this installer needs to resolve dependencies such as repositories through the container itself, so it goes last. 
    ); 
} 

Mis AutoMapperProfileInstaller necesita resolver un perfil que contiene dependencias con el fin de inicializar el asignador

public class AutoMapperProfileInstaller : IWindsorInstaller 
{ 
    public void Install(IWindsorContainer container, IConfigurationStore store) 
    { 
     Profile entityToViewModel = container.Resolve<EntityToViewModelProfile>(); 
     Profile[] profiles = new[] { entityToViewModel }; 

     Mapper.Initialize(config => 
     { 
      config.ConstructServicesUsing(container.Resolve); 

      foreach (Profile profile in profiles) 
      { 
       config.AddProfile(profile); 
      } 
     }); 
    } 
} 

Esto se siente mal en muchos niveles, lo que sería una mejor manera de inicializar AutoMapper perfiles?

Respuesta

0

Lo único malo con este enfoque es que especifica manualmente las implementaciones IWindowsInstaller. Use la reflexión para buscarlos y Activator.CreateInstance para crear instancias.

Le da un enfoque de configuración flexible donde cada parte/módulo en su sistema es responsable de sus propios registros.

Sin embargo, crearía una nueva interfaz para la configuración de AutoMapper IMapperConfiguration (responsabilidad única). Utilice la reflexión para escanear los conjuntos para esos también.

Cuestiones relacionadas