Как настроить Atommaper v 9.0 в MVC 5? - PullRequest
0 голосов
/ 02 апреля 2020

В предыдущем проекте я работал с Automapper v7.0.1, и все было в порядке.

Теперь я работаю над новым проектом и снова сделал свою архитектуру с MVC 5 и. Net framework 4.8, но я обнаружил, что с новой версией моя конфигурация с использованием PROFILE не работает правильно, я уже пробовал некоторые вещи в Интернете, но не могу заставить его работать правильно.

Можете ли вы помочь мне с конфигурацией и как использовать «ПРОФИЛЬ» в этой новой версии?

Спасибо ..

Настройка с V7.0.1

 public class AutoMapperConfiguration
    {
        public static void Configure()
        {
            Mapper.Initialize(x =>
            {                
                x.AddProfile<ViewModelToDomainMappingProfile>();
                x.AddProfile<DomainToViewModelMappingProfile>();               
            });
        }        
    }

«ПРОФИЛЬ» 1

public class ViewModelToDomainMappingProfile : Profile
    {
        public ViewModelToDomainMappingProfile()
        {

            CreateMap<ListAccountUsersViewModel, ApplicationUser>();
        }
    }

«ПРОФИЛЬ» 2

public class DomainToViewModelMappingProfile : Profile
    {
        public DomainToViewModelMappingProfile()
        {
            ConfigureMappings();
        }


        /// <summary>
        /// Creates a mapping between source (Domain) and destination (ViewModel)
        /// </summary>
        private void ConfigureMappings()
        {
            CreateMap<ApplicationUser, ListAccountUsersViewModel>();
        }
    }

, как я использую его в «Контроллере», и он отлично работает:

var listUserModel = accountUserService.GetUserList();

var mapperListUserModel = Mapper.Map<IEnumerable<ApplicationUser>, IEnumerable<ListAccountUsersViewModel>>(listUserModel);

Теперь, конфигурация с v9.0

public class AutoMapperConfiguration
    {

        public static IMapper Mapper { get; private set; }

        public static MapperConfiguration MapperConfiguration { get; private set; }
        public static void Configure()
        {
            MapperConfiguration = new MapperConfiguration(x =>
            {                
                x.AddProfile(new ViewModelToDomainMappingProfile());
                x.AddProfile(new DomainToViewModelMappingProfile());
            });

            Mapper = MapperConfiguration.CreateMapper();
        }

    }

«ПРОФИЛЬ 1» и «ПРОФИЛЬ 2» они остаются теми же

, как я использую его в загрузчике с Autofa c:

 var assemblyNames = Assembly.GetExecutingAssembly().GetReferencedAssemblies();
 var assembliesTypes = assemblyNames
                .Where(a => a.Name.Equals("Seccion.Web.Mappings", StringComparison.OrdinalIgnoreCase))
                .SelectMany(an => Assembly.Load(an).GetTypes())
                .Where(p => typeof(Profile).IsAssignableFrom(p) && p.IsPublic && !p.IsAbstract)
                .Distinct();

 var autoMapperProfiles = assembliesTypes
                .Select(p => (Profile)Activator.CreateInstance(p)).ToList();

 builder.Register(ctx => new MapperConfiguration(cfg =>
 {
    foreach (var profile in autoMapperProfiles)
    {
      cfg.AddProfile(profile);
    }
 }));

 builder.Register(ctx => ctx.Resolve<MapperConfiguration>().CreateMapper()).As<IMapper>().InstancePerLifetimeScope();

как Я использую его в «Контроллере» и не работает:

    private readonly MapperConfiguration config;
    //CTOR
    public AccountUserController(IAccountUserService  accountUserService, MapperConfiguration config)
    {
       this.accountUserService = accountUserService;
       this.config = config;
    }

    // ActionResult
    var mapper = config.CreateMapper();

    var listUserModel = accountUserService.GetUserList();

//Here send Error: Missing type map configuration or unsupported mapping.
    var mapperListUserModel = mapper.Map<IEnumerable<ApplicationUser>, IEnumerable<ListAccountUsersViewModel>>(listUserModel);

Можете ли вы помочь мне с конфигурацией и как использовать "ПРОФИЛЬ" в этой новой версии?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...