2012-09-21 4 views
8

Ich habe Autofac vor, aber jetzt möchte ich SimpleInjector versuchen. Mein Problem ist, auf den Aufruf der mappingEngine in meiner Methode, die ich die folgende Fehlermeldung erhalten:Simple Injector Registrierung 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 ist nicht das, was ich will. Im Registrierung AutoMapper hier auf dieser Basis:

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

Meine Frage ist, wie kann ich IMappingEngine in SimpleInjector registrieren und meine Profile korrekt hinzufügen?

Vielen Dank im Voraus!

Greets mTrax

Antwort

8

gelöst! :-)

Ich registrierte meine Profile zu spät, nach der Initialisierung der MvcControllerFactory. Ich hoffe, mein Pseudo-Beispiel hilft dir, einen solchen Fehler zu verhindern.

// 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() auf finden: Simple Injector MVC Integration Guide.

Verwandte Themen