【问题标题】:Autofac/Automapper - Custom value resolvers ErrorAutofac/Automapper - 自定义值解析器错误
【发布时间】:2019-11-21 07:30:15
【问题描述】:

Autofac 注册:

builder.RegisterType<RelatedTransportMangerResolver>().AsSelf();
builder.Register(context => new MapperConfiguration(cfg =>
{
    cfg.AddProfile<AssetMapperProfile>();
})).AsSelf().SingleInstance();

builder.Register(c => c.Resolve<MapperConfiguration>().CreateMapper(c.Resolve))
.As<IMapper>()
.InstancePerLifetimeScope();

使用自定义值解析器的地图:

CreateMap<TrafficArea, TrafficAreaViewModel>()
            .ForMember(ta => ta.TransportManagers,
                opt => opt.MapFrom(ta =>
                    ta.TrafficAreaKeyContacts
                        .Where(kc => kc.KeyContactGroup.HasFlag(KeyContactGroup.TransportManager))
                        .Select(atr => atr.KeyContact)))
            .ForMember(ta => ta.RelatedTransportManagers,
                opt => opt.MapFrom<RelatedTransportMangerResolver>());

返回的错误是:

此解析操作已经结束。使用 lambda 注册组件时,无法存储 lambda 的 IComponentContext 'c' 参数。相反,要么从 'c' 再次解析 IComponentContext,要么解析基于 Func 的工厂以从中创建后续组件。

关于如何解决此错误的任何想法?

【问题讨论】:

    标签: automapper autofac


    【解决方案1】:

    应该先多挖掘一下自己...

    如果有人遇到同样的问题,请在此处修复:

    builder.Register(c =>
    {
        //This resolves a new context that can be used later.
        var context = c.Resolve<IComponentContext>();
        var config = context.Resolve<MapperConfiguration>();
        return config.CreateMapper(context.Resolve);
    })
    .As<IMapper>()
    .InstancePerLifetimeScope();
    

    【讨论】:

      猜你喜欢
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      • 2015-01-30
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多