从AutoMapper MapFrom方法调用DBContext

时间:2014-12-17 17:05:55

标签: asp.net-mvc entity-framework dependency-injection inversion-of-control automapper

我在当前的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。

0 个答案:

没有答案