У меня есть следующее сопоставление продукта, которое вызовет зависимость (UpdateProduct в ProductMapService) для выполнения сопоставления с дочерними сущностями продукта после первоначального сопоставления.Однако, когда я выполняю процесс отображения, я получаю исключение (для этого объекта не определен конструктор без параметров).
Я не уверен, что это лучший способ внедрить зависимость в профильучебный класс.Кто-нибудь может посоветовать мне это?
Профиль продукта Automapper:
namespace MyAPI.Mappers
{
public class ProductProfiles: Profile
{
private readonly IProductMapService _productMap;
public ProductProfiles(IProductMapService productMap)
{
_productMap = productMap;
CreateMap<ProductForCreationDto, Product>();
CreateMap<ProductForUpdateDto, Product>()
.ForMember(p => p.VariOptions, opt => opt.Ignore())
.AfterMap((pDto, p) => _productMap.UpdateProduct(pDto, p));
}
}
}
ProductService.cs:
namespace MyAPI.Services
{
public class ProductMapService: IProductMapService
{
private readonly IMapper _mapper;
public ProductMapService(IMapper mapper)
{
_mapper = mapper;
}
public void UpdateProduct(ProductForUpdateDto productForUpdateDto, Product productFromRepo)
{
foreach (var variOptionDto in productForUpdateDto.VariOptions)
{
if(variOptionDto.Id == 0)
{
productFromRepo.VariOptions.Add(Mapper.Map<VariOption>(variOptionDto));
}
else
{
_mapper.Map(variOptionDto, productFromRepo.VariOptions.SingleOrDefault(vo => vo.Id == variOptionDto.Id));
}
foreach (var variOptionTwoDto in variOptionDto.VariOptionTwos)
{
if(variOptionTwoDto.Id == 0)
{
productFromRepo.VariOptions.FirstOrDefault(vo => vo.Id == variOptionDto.Id).VariOptionTwos.Add(Mapper.Map<VariOptionTwo>(variOptionTwoDto));
}
else
{
_mapper.Map(variOptionTwoDto, productFromRepo.VariOptions.FirstOrDefault(vo => vo.Id == variOptionDto.Id).VariOptionTwos.SingleOrDefault(vot => vot.Id == variOptionTwoDto.Id));
}
}
}
}
}
}
и в файле Startup.cs:
services.AddAutoMapper();
services.AddSingleton<IProductMapService, ProductMapService>();