【问题标题】:Having AutoMapper to inject dependencies using an IoC Container when needed让 AutoMapper 在需要时使用 IoC 容器注入依赖项
【发布时间】:2014-06-08 09:33:13
【问题描述】:

我几乎尝试了所有方法,但我无法让 AutoMapper 映射 A => B 当 B 没有无参数构造函数时

我正在使用 Unity 并且所有依赖项都已方便地注册但是,我如何对 AutoMapper 说“嘿,如果目标实例在构造函数中需要一些依赖项,请让 Unity 构建它,然后再进行映射。

我试过了

 Mapper.Initialize(configuration =>
        {
            configuration.ConstructServicesUsing(container.Resolve);
            configuration.CreateMap<Person, PersonViewModel>();
        });

但它不起作用:(

编辑:事实上,我撒了一点谎。我没有使用 Unity。我正在使用Grace,但不想提出一个相对未知的容器来询问高级主题:)

我已经解决了这个问题,它像丝绸一样光滑。确切的代码是这样的。请记住,我使用的是 Grace IoC 容器(我强烈推荐)。

Bootstrapper.Instance.Configure(new CompositionRoot());

        Mapper.Configuration.ConstructServicesUsing(type => Bootstrapper.Instance.Container.Locate(type));
        Mapper.CreateMap<Person, PersonViewModel>()
            .ConstructUsingServiceLocator();

【问题讨论】:

  • 请不要用诸如此类的问题误导社区。不仅受访者无法给你正确的答案,因为你问的是一个无关主题的问题,而问题的措辞和标签就好像它是关于 Unity 的,而且这会让这个问题对用户毫无用处谁将在此站点的剩余生命周期中搜索 StackOverflow。问一个关于 Grace 的正确问题,而不是问一个关于 Unity 的误导性问题,这根本不丢人……如果只是,反之亦然……

标签: inversion-of-control unity-container automapper constructor-injection


【解决方案1】:

像这样:

configuration.CreateMap<Person, PersonViewModel>()
    .ConstructUsingServiceLocator();

对应该由您的服务定位器创建的每个映射执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 2012-01-14
    • 2011-04-06
    • 1970-01-01
    • 2015-01-12
    相关资源
    最近更新 更多