В предыдущем проекте я работал с 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);
Можете ли вы помочь мне с конфигурацией и как использовать "ПРОФИЛЬ" в этой новой версии?