【发布时间】:2019-02-08 00:55:23
【问题描述】:
目前我坚持使用 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
- 服务模型
- AutoMapperProfiles
-
MyMvcApplication.Web
- 型号
- AutoMapperProfiles
AutoMapperProfiles 中定义的所有映射在 Web 项目和服务项目中引用模型的 Web 仍然在 automapper 中定义。
Service 项目的 AutoMapperProfiles 中定义的所有引用 ServiceModels 和 Entites 的映射在 automapper 中都丢失了。
如果我调用“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>();
}
}
}
有人知道我在执行自动映射器时做错了什么吗?
最好的问候
【问题讨论】:
-
可能您传递给 AddProfiles 的列表没有您第二次需要的内容。
-
不,当我在网站上活跃冲浪时,多次调用相同/不同的页面并映射其工作正常.. 因为我正在等待 apppool 超时......所以你的意思是“第二次”?
-
超时后。
标签: timeout mapping automapper