AutoMapper中的AddAutoMapper默认使用AddScoped方式把AutoMapper实例注册到.NET Core DI中的:
public void ConfigureServices(IServiceCollection services) { ... services.AddAutoMapper(); ... }
如果你在一个IHostedService注册了一个Singleton实例, 该Singleton实例的构造函数中通过DI注入的方式引用了IMapper, 将会发生如下错误:
'Cannot consume scoped service 'AutoMapper.IMapper' from singleton 'XXX'.'
解决方法是把IMapper也以Singleton模式注册:
public class AutoMapperProfile : Profile { public AutoMapperProfile() { CreateMap<SourceClass, DestinationClass>(); } }
public void ConfigureServices(IServiceCollection services) { ... var mappingConfig = new MapperConfiguration(mc => { mc.AddProfile(new AutoMapperProfile()); }); IMapper mapper = mappingConfig.CreateMapper(); services.AddSingleton(mapper); ... }
Refs:
https://stackoverflow.com/questions/40275195/how-to-setup-automapper-in-asp-net-core