自动映射器错误 - "No Parameterless constructor defined for this object"



最终,我试图从车辆视图模型 ->车辆映射。来源下面列出。值得注意的是,每个类别的两个属性都是不同类型的事实。

执行映射的代码

var newVehicle = Mapper.Map<Vehicle>(vehicleData_);

映射课程的代码 公共类车辆视图模型 { 公共车辆ViewModel() {

    }
    //Fuel Economy is in L/Km
    public float CityFuelEconomy {get;set;}
    public float HighwayFuelEconomy {get;set;}
    public float ListPrice {get;set;}
    public float SoldPrice{get;set;}
    [Required]
    public int ModelForeignKey {get;set;}
    [Required]
    public int DealerForeignKey{get;set;}
    public string Notes{get; set;}
    public string Color{get; set;}
}

public class Vehicle
{
    public Vehicle()
    {
    }
    [Key]
    public int Id {get; set;}
    //Fuel Economy is in L/Km
    public float CityFuelEconomy {get;set;}
    public float HighwayFuelEconomy {get;set;}
    public float ListPrice {get;set;}
    public float SoldPrice{get;set;}
    [ForeignKey("VehicleModelId")]
    public virtual VehicleModels ModelForeignKey {get;set;}
    [ForeignKey("VehicleDealerId")]
    public virtual Dealer DealerForeignKey{get;set;}
    public string Notes{get; set;}
    public string Color{get; set;}
}

要处理具有不同类型类型的属性的映射,我在Automapper配置(startup.cs)

中使用了以下"表单"
Mapper.Initialize(config =>
        {
            config.CreateMap<VehicleViewModel, Vehicle>()
            .ForMember(dest => dest.DealerForeignKey, opt => opt.MapFrom<DealerResolver>())
            .ForMember(dest => dest.ModelForeignKey, opt => opt.MapFrom<VehicleModelResolver>()).ReverseMap();
        });

提到的解析器(vericlemodelresolver和dealerresolver)只需占用源属性(在这种情况下为Thype Integer),然后返回车辆正确类型的对象。Modelforeignkeyand parter。

private IVehicleRepository _vehicleRepo;
    public DealerResolver(IVehicleRepository vehicleRepo_)
    {
        _vehicleRepo = vehicleRepo_;
    }
    public Dealer Resolve(VehicleViewModel source, Vehicle destination, Dealer destMember, ResolutionContext context)
    {
        List<Dealer> dealers = _vehicleRepo.GetDealerById(source.DealerForeignKey).ToList();
        return dealers.FirstOrDefault();
    }

public class VehicleModelResolver : IValueResolver<VehicleViewModel, Vehicle, VehicleModels>
{
    private IVehicleRepository _vehicleRepo;
    public VehicleModelResolver(IVehicleRepository vehicleRepo_)
    {
        _vehicleRepo = vehicleRepo_;
    }
    public VehicleModels Resolve(VehicleViewModel source, Vehicle destination, VehicleModels destMember, ResolutionContext context)
    {
        List<VehicleModels> vehModels = _vehicleRepo.GetModelById(source.ModelForeignKey).ToList();
        return vehModels.FirstOrDefault();
    }
}

运行代码时,我会看到错误消息"无参数为此对象定义的无参数构造函数"。在运行时逐步浏览代码,揭示了对所有属性的映射都很好,直到wareviewModel.modelforeignkey。

映射车辆ViewModel.modelforeignkey-> warter.modelforeignkey有一些东西,我目前看不到。就像我之前说的那样,我意识到这些属性是不同类型的,但是解析器应该考虑到这一点。有什么想法吗?

更新 - 对此有一个建议 - DI配置不正确。制作了一个快速视频,详细介绍了该问题及其解决方案https://youtu.be/tgu7tjdvsk8

youtu.be/tgu7tjdvsk8

并不是真正的回答,我只是制作了一个视频,以使其非常清楚。 - 我想归功于Lucian Bargaoanu真正的答案。

相关内容

最新更新