15

我最近将我的 .net 核心升级到 3.0,Automapper 从 6.2 升级到 9.0。现在,在 mapfrom 函数中使用 mapper.map 时,自动映射器会引发以下编译时错误。

CreateMap<DomainEntity, destination>()
            .ForMember(dest => dest.userId, opt => opt.MapFrom(src => Mapper.Map<.UserInfo, string>(src.UserDetails)))
            .ForMember(dest => dest.alertKey, opt => opt.MapFrom(src => src.Key));

非静态字段、方法或属性“Mapper.Map(xxx)”需要对象引用

Automapper 在 Mapper 类方法的新升级中删除了 static 关键字。

4

2 回答 2

12

您的问题特定于映射器的配置文件,但帖子标题也与以下问题相关。就我而言,这不是完全相同的问题,但我遇到了同样的错误。所以我想把这个分享给和我一样有同样错误的人。

看起来 Automapper 不再是静态类了。所以你需要实例化它。为此,您需要安装软件包:

Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection

完成后,您可以在类中注入 IMapper 实例,例如:

public MyClass {

     private readonly IMapper _mapper;

     public MyClass(IMapper mapper){
          _mapper = mapper;
     }

     public DtoType SomeMethod(EntityType entity){
          // do your mapping..
          var myDtoType = _mapper.Map<DtoType>(entity);
     }
}

重要的是,它可能看起来有点像黑魔法,因为您从未在 ServiceCollection 中注册过 IMapper。但是,Nuget 包和 ConfigureServices 中对“AddAutoMapper”的调用会为您处理所有这些。

PS:没有在VS上写代码,但你明白了。

于 2020-03-26T14:02:29.023 回答
3

我最近也遇到这个问题,这是我做的

安装了这个包AutoMapper.Extensions.Microsoft.DependencyInjection。这个包是对 AutoMapper 的依赖。它还包含针对 AutoMapper 的 ASP.NET 核心特定扩展,允许它与内置的依赖注入系统配合使用。

然后按照以下链接中的步骤进行操作。那么你应该很高兴

https://dotnetcoretutorials.com/2017/09/23/using-automapper-asp-net-core/

于 2019-11-18T16:35:24.863 回答