2016-04-14 10 views
2

AutoMapper'ın newer configuration numaralı sayfasına geçiş yapıyorum. AutoMapper GitHub Wiki'daki örneklere bakıyordum ve yapılandırmayı nasıl tamamlayacağımı biraz karıştırıyor. Wiki, bir yerde MapperConfiguration örneğini D.I.'de saklayabileceğinizi söylüyor. konteyner (veya statik olarak saklayın), ancak sonraki paragraf Mapper örneğini statik olarak depolayabileceğinizi belirtir. Sonra bir D.I kullanılarakAutoMapper 4.2/5.0'a geçiş yaparken, bağımlılık enjeksiyon kapsayıcımda IMapper örneğini mi yoksa MapperConfiguration örneğini mi saklamalıyım?

var config = new MapperConfiguration(cfg => { 
    cfg.CreateMap<Foo, Bar>().ReverseMap(); //creates a bi-directional mapping between Foo & Bar 
    cfg.AddProfile<FooProfile>(); //suppose FooProfile creates mappings... 
}); 

yapıyor olması gerekmediğini Özetle, emin değilim gibi bu örneği saklamak için Unity olarak konteyner ... Daha sonra eşleştirmeleri gerçekleştirmek için bu örneği kullanabilirsiniz

container.RegisterInstance<MapperConfiguration>(config); 

...

public void CreateMapping(MapperConfiguration config, Bar bar) 
{ 
    Foo foo = config.CreateMapper().Map(bar); 
    //do stuff with foo 
} 

ya, ben IMapper örneğini depolamak gerektiğini MapperConfiguration

şöyle kullanımını olurdu
container.RegisterInstance<IMapper>(config.CreateMapper()); 

yapar

Tüm yapılandırma, ilk yapılandırma Harita yöntemini çağırdıktan sonra yapacağım. Yapılandırmayı değiştirmem gerekmeyecek. Bağımlılık enjeksiyon kapsayıcısında IMapper örneğini veya MapperConfiguration örneğini mi saklamalıyım?

Güncelleme: Ben IMI ile benim D.I. bir kap. Benim durumumda, Birlik.

cevap

2

Neden ikisini de saklayamadığınızı anlamıyorum. LINQ projeksiyonları için MapperConfiguration ve eşlemenin kendisi için IMapper'u kullandığım için birini veya diğerini veya her ikisini enjekte etmem gereken durumlar var. Benim IoC kayıtları şu şekilde görünür: IMapper nesne MapperConfiguration yarattığı gibi, benim IoC MapperConfiguration mevcut kayıttan bir IMapper örneğini üretiyor

public static Container RegisterAutoMapper(this Container container) 
{ 
    var profiles = typeof(AutoMapperRegistry).Assembly.GetTypes().Where(t => typeof(Profile).IsAssignableFrom(t)).Select(t => (Profile)Activator.CreateInstance(t)); 

    var config = new MapperConfiguration(cfg => 
    { 
     foreach (var profile in profiles) 
     { 
      cfg.AddProfile(profile); 
     } 
    }); 

    container.Register<MapperConfiguration>(() => config); 
    container.Register<IMapper>(() => container.GetInstance<MapperConfiguration>().CreateMapper()); 

    return container; 
} 

}

.

+1

Hangi süreyi kullanıyorsunuz? Bu sürüm 4'ten sürüm 5'e değişti ve değişti. Bazı kullanım dışı şeyler var ve bazı yeni öneriler var. – alltej

+0

@alltej Bu değişikliklerin neler olduğunu belirtebilir misiniz? 5. sürüme geçmeye çalışıyorum. – Shago