mapping - 简单Injector注册IMappingEngine(AutoMapper)

标签 mapping automapper profile simple-injector

我以前使用过 Autofac,但现在我想尝试一下 SimpleInjector。我的问题是,在我的方法中调用 mappingEngine 时,出现以下错误:

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

我的问题是,如何在 SimpleInjector 中注册 IMappingEngine 并正确添加我的配置文件?

提前致谢!

问候mtrax

最佳答案

解决了!:-)

在启动 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 .

关于mapping - 简单Injector注册IMappingEngine(AutoMapper),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12538007/

相关文章:

java - 正确映射 JPA 实体

knockout.js - 如何使用 ko.mapping 只观察一个键

c# - Entity Framework 和 Automapper 中的数据投影

python - 为什么 pstats.print_callers() 忽略限制参数?

c# - 为什么我在定义自定义配置文件时收到 TypeLoadException?

java - 我需要将映射放入 hibernate 配置中吗

exception - Elasticsearch 查询 "empty index"

c# - AutoMapper 在映射两个列表时返回一个空列表

c# - Automapper 使用子对象覆盖列表中缺少的源属性

ios - 如何允许用户通过 Firebase 在存储的个人资料中输入信息,而无需登录/注册?