2016-04-21 11 views
3

Ich habe folgendes AutoMapper Profil:Wie ein AutoMapper Profil mit Unity registrieren

public class AutoMapperBootstrap : Profile 
{ 
    protected override void Configure() 
    { 
     CreateMap<Data.EntityFramework.RssFeed, IRssFeed>().ForMember(x => x.NewsArticles, opt => opt.MapFrom(y => y.RssFeedContent)); 
     CreateMap<IRssFeedContent, Data.EntityFramework.RssFeedContent>().ForMember(x => x.Id, opt => opt.Ignore()); 
    } 
} 

Und ich es so bin Initialisierung:

var config = new MapperConfiguration(cfg => 
{ 
     cfg.AddProfile(new AutoMapperBootstrap()); 
}); 

container.RegisterInstance<IMapper>("Mapper", config.CreateMapper()); 

Wenn ich versuche, es in meinem Konstruktor zu injizieren:

private IMapper _mapper; 
public RssLocalRepository(IMapper mapper) 
{ 
    _mapper = mapper; 
} 

ich erhalte den folgenden Fehler:

The current type, AutoMapper.IMapper, is an interface and cannot be constructed. Are you missing a type mapping?

Wie kann ich das AutoMapper-Profil ordnungsgemäß mit Unity initialisieren, sodass ich den Mapper überall durch DI verwenden kann?

// named mapping with "Mapper name" 
container.RegisterInstance<IMapper>("Mapper", config.CreateMapper()); 

Aber wie Ihr Resolver diesen Namen wissen:

Antwort

8

In Ihrem Beispiel erstellen Sie Mapping genannt?

Sie müssen Sie Mapping ohne Namen registrieren:

// named mapping with "Mapper name" 
container.RegisterInstance<IMapper>(config.CreateMapper()); 

Es wird Ihre Mapper Instanz IMapper Schnittstelle abzubilden und diese Instanz wird auf die Lösung Schnittstelle

Verwandte Themen