2012-09-21 13 views
8

Użyłem Autofac przed, ale teraz chcę dać SimpleInjector spróbować. Mój problem polega na wywołaniu mappingEngine w moim sposobie pojawia się następujący błąd:Simple Injector registration 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 nie jest to, co chcę. Im rejestracji Automapper oparciu o to tutaj:

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(); 

Moje pytanie ist, w jaki sposób mogę zarejestrować IMappingEngine w SimpleInjector i dodać poprawnie moich profilach?

Z góry dziękuję!

Greets mTrax

Odpowiedz

8

rozwiązany! :-)

Zarejestrowałem moje profile zbyt późno, po zainicjowaniu MvcControllerFactory. Mam nadzieję, że mój pseudo przykład pomoże ci zapobiec takiemu błędowi.

// 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(), aby znaleźć pod adresem: Simple Injector MVC Integration Guide.