我在当前的MVC项目中使用AutoMapper和EF。
在我的一些CreateMap调用中,我使用对EF的调用来映射一些属性,如下所示:
Mapper.CreateMap<Geography, DropdownListViewModel>()
.ForMember(dest => dest.Items,
opts => opts.MapFrom(src => profileService.GetGeographies()));
在此示例中,我的profileService.GetGeographies方法正在调用EF以检索地理位置。我的问题是关于profileService(及其底层dbContext实例)的生命周期管理。 AutoMapper是否会在应用程序的整个生命周期中保持对profileService的引用?如果是这样,我主要担心的是底层dbContext将变得陈旧(我将使用DbContext的每个请求DI进入ProfileService类。
使用包装ProfileService的自定义ValueResolver类是否是更好的方法,因为我假设每次映射发生时都会实例化这些类?在那种情况下,我可以对IoC容器进行服务定位器调用以检索dbContext实例,该实例应该为我提供每个请求实例吗?
更新
经过进一步审核,我意识到我可以简单地执行以下操作:
Mapper.CreateMap<Geography, DropdownListViewModel>()
.ForMember(dest => dest.Items,
opts => opts.MapFrom(src => DependencyResolver.Current.GetService<IProfileService>().GetGeographies()));
这应该允许AutoMapper在每次映射时都使用新的IProfileService。