8

以前は Autofac を使用していましたが、SimpleInjector を試してみたいと思います。私の問題は、メソッド内で mappingEngine を呼び出すと、次のエラーが発生することです。

タイプ マップ構成が欠落しているか、サポートされていないマッピングです。

マッピング タイプ: Something -> SomethingDto 宛先パス: IEnumerable`1[0]

ソース値:

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

^-- doesn't work

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

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

Mapper.Map は私が望むものではありません。ここに基づいてAutomapperを登録しています:

Ninject を単純なインジェクターに置き換える

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

私の質問は、IMappingEngine を SimpleInjector に登録し、プロファイルを正しく追加するにはどうすればよいですか?

前もって感謝します!

mtraxに挨拶

4

1 に答える 1

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にあります。

于 2012-09-22T10:16:13.037 に答える