Autofac / Automapper - Ошибка преобразователей пользовательских значений - PullRequest
0 голосов
/ 11 июля 2019

Autofac Registration:

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

Возвращаемая ошибка:

Эта операция разрешения имеетуже закончился.При регистрации компонентов с использованием лямбда-выражения параметр IComponentContext 'c' для лямбды не может быть сохранен.Вместо этого либо разрешите IComponentContext снова из 'c', либо разрешите фабрику на основе Func <> для создания последующих компонентов из.

Есть идеи, как исправить эту ошибку?

1 Ответ

0 голосов
/ 11 июля 2019

Должно быть, сначала нужно немного покопаться ...

Исправить, если у кого-то есть такая же проблема:

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