2016-09-23 3 views
2

Ich versuche, AutoMapper 5.1.1 mit CastleWindsor zu registrieren, aber ich weiß nicht, wo Mapper.Initialize() ordnungsgemäß aufgerufen werden soll.AutoMapper 5.1.1 mit Castle Windsor registrieren

AutoMapper Profil:

namespace AutoMapper_DI.Mappings 
{ 
    public class WebMappingProfile : Profile 
    {   
     public WebMappingProfile() 
     { 
      CreateMap<Person, PersonDTO>();    
     } 
    } 
} 

Schloss Windsor Anmeldung:

class MainInstaller : IWindsorInstaller 
{ 
    public void Install(IWindsorContainer container, IConfigurationStore store) 
    {    
     container.AddFacility<TypedFactoryFacility>(); 

     container.Register(Component.For<IMapper>().UsingFactoryMethod(x => 
     { 
      return new MapperConfiguration(c => 
      { 
       c.AddProfile<WebMappingProfile>(); 
      }).CreateMapper(); 
     })); 

     container.Register(Component.For<MainClass>()); 
    } 
} 

Und dann, wenn ich _mapper ich Mapper nicht initialisiert Ausnahme bekam:

class MainClass 
{ 
    private readonly IMapper _mapper; 

    public MainClass(IMapper mapper) 
    { 
     _mapper = mapper; 
    } 

    public void Start() 
    {    
     Person p = new Person 
     { 
      Name = "Somebody", 
      Surname = "Nobody", 
      Birth = new DateTime(1984, 06, 18) 
     };    
     var personDTO = Mapper.Map<Person, PersonDTO>(p); 

    } 

} 

Vielen Dank für alle Ratschläge.

+0

Haben Sie darüber nachgedacht, die Mapper-Konfiguration separat zu erstellen und sie als "Instanz" mit 'Component.For () .Instance (mapper);' zu registrieren – stuartd

Antwort

3

Also, Code oben funktioniert. Problem war, dass ich ein Idiot bin. Weil ich Mapper.Map, aber _mapper.Map nicht aufrufen sollte.

Verwandte Themen