自动映射器-已达到Apppool空闲超时-缺少映射

时间:2018-09-02 23:37:17

标签: timeout mapping automapper

目前,我坚持使用apppool超时和自动映射器。

在我的Global.asax中,我在Application_start函数中编写了以下代码。

Mapper.Initialize(cfg =>
{
    cfg.CreateMissingTypeMaps = false;

    cfg.CreateMap<string, MvcHtmlString>()
    .ConvertUsing<MvcHtmlStringConverter>();

    // Get all my project assemblies
    Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies().Where(
      x => x.GetName().Name.StartsWith("MyMvcApplication.")).ToArray();

    // Add all assemblies to automapper to search for defined profiles.
    cfg.AddProfiles(assemblies);
});

首先,如果我要重建我的mvc项目并访问我的页面,那么一切正常。 我从许多程序集中获得的所有映射均按预期定义。

现在的问题是: 如果我正在等待apppool超时(例如,定义5分钟)并在5分钟后访问我的网站,则会收到一些“ AutoMapper.AutoMapperMappingException:缺少类型映射配置或不支持的映射”的信息。如果自动映射器试图映射除主部件之外的部件中的某些模型。

解决方案结构:

  • MyMvcApplication.DataAccess

    • 实体
  • MyMvcApplication.Services

    • ServiceModels
    • AutoMapperProfiles
  • MyMvcApplication.Web

    • 模型
    • AutoMapperProfiles

在Web的AutoMapperProfiles中定义的所有映射(引用到Web项目和服务项目中的模型)仍在自动映射器中定义。

在Automapper中,Service项目的AutoMapperProfiles中定义的所有映射(引用ServiceModel和Entites)都在MISSING中。

如果我正在调用“ Mapper.Configuration.GetAllTypeMaps()”,则会得到以下结果 超时之前:{AutoMapper.TypeMap[30]} 超时后:{AutoMapper.TypeMap[13]}

因此,在应用程序池开始休眠之后,自动映射器会丢失其映射。

自动映射器配置文件的示例:

namespace MyMvcApplication.Services.MappingProfiles
{
    using AutoMapper;
    using MyMvcApplication.DataAccess.DAL;
    using MyMvcApplication.Services.Models.Users;

    public class UserMappingProfile : Profile
    {
        public UserMappingProfile()
        {
            base.CreateMap<UserEntity, User>();
            base.CreateMap<UserEntity, BasicUser>();
            base.CreateMap<UserEntity, OverviewUser>();
            base.CreateMap<UserEntity, LoginUser>();
        }
    }
}

有人知道我在执行自动映射器时在做什么错吗?

最诚挚的问候

1 个答案:

答案 0 :(得分:0)

我明白了,发现了我自己的错误。 在AutoMapper.Initialize中,我编写了“ AppDomain.CurrentDomain.GetAssemblies()”,这在appool回收后引起了问题。相反,如果当前未加载所有程序集,则必须使用“ BuildManager.GetReferencedAssemblies()”来获取所有程序集。

解决我的问题的参考链接:https://stackoverflow.com/a/2479400/10236859