2012-09-21 56 views
8

我以前使用Autofac,但現在我想給SimpleInjector一試。我的問題是,在叫我的方法中的mappingEngine我得到以下錯誤:簡單的噴油器註冊IMappingEngine(AutoMapper)

Missing type map configuration or unsupported mapping.

Mapping types: Something -> SomethingDto Destination path: IEnumerable`1[0]

Source value:

_mappingEngine.Map<IEnumerable<SomethingDto>>(IEnumerableOfSomething); 

^-- doesn't work 

Mapper.Map<IEnumerable<SomethingDto>>(IEnumerableOfSomething); 

^-- works (That's not what I want) 

Mapper.Map不是我想要的。林註冊Automapper在此基礎上在這裏:

Replace Ninject with Simple Injector

container.Register<ITypeMapFactory, TypeMapFactory>(); 
container.RegisterAll<IObjectMapper>(
    MapperRegistry.AllMappers()); 
container.RegisterSingle<ConfigurationStore>(); 
container.Register<IConfiguration>(() => 
    container.GetInstance<ConfigurationStore>()); 
container.Register<IConfigurationProvider>(() => 
    container.GetInstance<ConfigurationStore>()); 
container.Register<IMappingEngine, MappingEngine>(); 

Mapper.Initialize(x => 
      { 
       var profiles = container.GetAllInstances<Profile>(); 

       foreach (var profile in profiles) 
       { 
        x.AddProfile(profile); 
       } 
      }); 

     Mapper.AssertConfigurationIsValid(); 

我的問題IST,我怎麼在SimpleInjector註冊IMappingEngine和正確添加我的檔案?

在此先感謝!

迎接mtrax

回答

8

解決了! :-)

在啓動MvcControllerFactory後,我註冊了我的配置文件太晚了。我希望我的僞示例可以幫助你防止這樣的錯誤。

// SimpleInjector 
var container = new Container(); 

// AutoMapper registration 
container.Register<ITypeMapFactory, TypeMapFactory>(); 
container.RegisterCollection(MapperRegistry.Mappers); 
container.RegisterSingleton<ConfigurationStore>(); 
container.Register<IConfiguration>(container.GetInstance<ConfigurationStore>); 
container.Register<IConfigurationProvider>(container.GetInstance<ConfigurationStore>); 
container.RegisterSingleton(() => Mapper.Engine); 

// AutoMapper Profiles registration 
container.RegisterCollection<Profile>(new MappingAProfile(), 
             new MappingBProfile(), 
             new MappingCProfile()); 

// Adding AutoMapper profiles 
Mapper.Initialize(x => 
    { 
     var profiles = container.GetAllInstances<Profile>(); 

     foreach (var profile in profiles) 
     { 
      x.AddProfile(profile); 
     } 
    }); 

Mapper.AssertConfigurationIsValid(); 

container.Verify(); 

container.RegisterAsMvcControllerFactory(); 

* RegisterAsMvcControllerFactory()找到:Simple Injector MVC Integration Guide

相關問題