Automapper - истекло время простоя Apppool - отсутствует отображение - PullRequest
0 голосов
/ 03 сентября 2018

В настоящее время я застрял с таймаутом 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 и зашел на мою страницу, все работает нормально. Все мои сопоставления из многих сборок определены так, как и ожидалось.

Теперь проблема: Если я жду истечения времени ожидания приложения (например, определено 5 минут) и получаю доступ к моему веб-сайту через 5 минут, я получаю «AutoMapper.AutoMapperMappingException: отсутствует конфигурация карты типов или неподдерживаемое отображение». если автопроизводитель пытается отобразить некоторые модели из сборок, кроме основной сборки.

Структура раствора:

  • MyMvcApplication.DataAccess

    • Сущность
  • MyMvcApplication.Services

    • ServiceModels
    • AutoMapperProfiles
  • MyMvcApplication.Web

    • Модель
    • AutoMapperProfiles

Все сопоставления, определенные в AutoMapperProfiles из Интернета, которые ссылаются на модели в веб-проекте и сервисном проекте, по-прежнему определены в автопрокатчике.

Все сопоставления, определенные в AutoMapperProfiles из проекта Service, который ссылается на ServiceModels и Entites, ПРОПУСКАЮТСЯ в autopper.

Если я звоню "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>();
        }
    }
}

Кто-нибудь знает, что я делаю не так с реализацией autopper?

С уважением

1 Ответ

0 голосов
/ 16 сентября 2018

Я понял и нашел свою ошибку. В AutoMapper.Initialize я написал «AppDomain.CurrentDomain.GetAssemblies ()», это вызвало проблему после переопределения appool. Вместо этого я должен использовать «BuildManager.GetReferencedAssemblies ()», чтобы также получить все сборки, если они в данный момент не загружены.

Ссылка для решения моей проблемы: https://stackoverflow.com/a/2479400/10236859

...