代码如下:
[DependsOn(typeof(ApplicationContractModule))]
[DependsOn(typeof(EntityFrameCoreModule))]
[DependsOn(typeof(AbpAutoMapperModule))]
[DependsOn(typeof(CommonModule))]
public class ApplicationServiceModule:AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpAutoMapperOptions>(options =>
{
options.AddProfile<HqhProjectAutoMapperProfile>(validate: true);
});
}
}
/// <summary>
/// 实体与Dto映射关系
/// </summary>
public class HqhProjectAutoMapperProfile : Profile
{
public HqhProjectAutoMapperProfile()
{
CreateMap<AddEditUserDto, User>().ForMember(f=>f.Password,opt=>opt.Ignore()).ForMember(f=>f.LastLoginTime,opt=>opt.Ignore());
CreateMap<User, UserDto>();
}
}
服务方法代码:
var entity = ObjectMapper.Map<AddEditUserDto, User>(input);
entity.Password = EncryptionPwd(_option.InitPassword);
await _userRepository.InsertAsync(entity);
映射的时候报异常:
Value cannot be null. (Parameter 'provider')
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
at Volo.Abp.Application.Services.ApplicationService.LazyGetRequiredService[TRef](Type serviceType, TRef& reference)
at Volo.Abp.Application.Services.ApplicationService.LazyGetRequiredService[TService](TService& reference)
at Volo.Abp.Application.Services.ApplicationService.get_ObjectMapper()
at hqh.project.Application.Services.Services.UserService.<AddEditUser>d__3.MoveNext() in E:\test\hqh.project\hqh.project\hqh.project\hqh.project.Application.Services\Services\UserService.cs:line 46
请问有知道哪里没配置的吗,
我也遇到这个问题,请问有解决吗?
没解决
@花开花落-2014: 我解决这个问题了。
看报错,是试图从 ServiceProvider
里获取IObjectMapper
实例时, ServiceProvider
为 null
引起的。
我的使用场景是和在控制台程序里使用 EasyNetQ
有关。
在 AdvancedBus.Consume
方法处理队列消息时传递一个委托(貌似每次执行这个委托都是在不同的线程里,因为context.ServiceProvider
在里边 IsDisposed=true
),而在异步委托里无法使用 DI 实例化 一个 ApplicationService
. 后来定义了一个静态类以及静态属性 IServiceProvider
并在执行PostConfigureServices
时赋值,然后就解决了。
但是如果你是在 WebAPI 里使用,应该不会遇到我这个问题。
供参考。