C# 什么是「;“实例”;相当于使用;“静态”;使用AutoMapper 7.0.1在CreateMap中映射?
我正在尝试升级到AutoMapper 7.0.1,它不再使用静态方法。我得到以下错误: 映射程序未初始化。使用适当的参数调用Initialize 配置如果您试图通过 容器或其他,请确保您没有对 静态映射器.Map方法,如果您使用的是ProjectTo或 使用DataSource扩展方法,确保传入 适当的IConfigurationProvider实例 我认为它来自这样的配置文件,我切换到不使用静态方法,除非它仍然在lambda表达式中使用staticC# 什么是「;“实例”;相当于使用;“静态”;使用AutoMapper 7.0.1在CreateMap中映射?,c#,automapper,automapper-7,C#,Automapper,Automapper 7,我正在尝试升级到AutoMapper 7.0.1,它不再使用静态方法。我得到以下错误: 映射程序未初始化。使用适当的参数调用Initialize 配置如果您试图通过 容器或其他,请确保您没有对 静态映射器.Map方法,如果您使用的是ProjectTo或 使用DataSource扩展方法,确保传入 适当的IConfigurationProvider实例 我认为它来自这样的配置文件,我切换到不使用静态方法,除非它仍然在lambda表达式中使用staticMapper.Map(): public cl
Mapper.Map()
:
public class MyProfile : Profile
{
public MyProfile()
{
CreateMap<CredentialDetailDto, CredentialDetail>()
.ForMember(x => x.Owners, opt => opt.ResolveUsing(y =>
Mapper.Map<IList<OwnerDto>>(y.Owners)))
}
}
公共类MyProfile:Profile
{
公共MyProfile()
{
CreateMap()
.ForMember(x=>x.owner,opt=>opt.resolvesusing(y=>
Mapper.Map(y.owner)))
}
}
我怎样才能得到一个映射器的实例来代替静态的
mapper.Map
方法呢?使用Lucian的注释,我发现。似乎有一些重载将传递给您一个上下文,该上下文的实例为IMapper
例如:
.ForMember(x => x.Owners, opt => opt.ResolveUsing((src, dst, arg3, context) =>
context.Mapper.Map<IList<OwnerDto>>(src.Owners)))
及
您只需要在lambda表达式中提供正确数量的参数。这可能会有所帮助:Context.Mapper。@LucianBargaoanu,我在配置文件中没有看到任何
Context
属性。这个用法会是什么样子?@LucianBargaoanu,你的评论帮我找到了答案。这是正确的吗.ForMember(x=>x.Owners,opt=>opt.resolvesusing((src,dst,arg3,context)=>context.Mapper.Map(src.Owners))
Ok,但为什么需要这个?这就是默认情况下发生的情况。@Lucianbargaonanu,如果你是说代码本身在做什么,我没有写它,也不知道它的意图。这本书的作者可能不知道自己在做什么,但我不能百分之百肯定。我只是想在不破坏任何东西的情况下升级它。我明白了。无论如何,很可能不需要它。即使出于某种原因需要,使用MapFrom也会更好。这就是我想说的。但我明白你的意思:)
.AfterMap((s, d, context) =>
.ConvertUsing((source, dst, context) =>