簡體   English   中英

自動映射器錯誤 - “沒有為此對象定義無參數構造函數”

[英]Auto Mapper Error - "No Parameterless constructor defined for this object"

最終,我試圖從 VehicleViewMODEl -> Vehicle 映射。 來源如下。 值得注意的是,每個類的兩個屬性屬於不同類型。

進行映射的代碼

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

映射類的代碼 public class VehicleViewModel { public VehicleViewModel() {

    }
    //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;}
}

為了處理具有不同類型類型的屬性的映射,我在我的自動映射器配置 (startup.cs) 中使用了以下“formember”

Mapper.Initialize(config =>
        {
            config.CreateMap<VehicleViewModel, Vehicle>()
            .ForMember(dest => dest.DealerForeignKey, opt => opt.MapFrom<DealerResolver>())
            .ForMember(dest => dest.ModelForeignKey, opt => opt.MapFrom<VehicleModelResolver>()).ReverseMap();
        });

提到的解析器(VehicleModelResolver 和 DealerResolver)只是獲取源屬性(在這種情況下是 thype 整數)並為 Vehicle.ModelForeignKey 和 Vehicle.DealerForeignKey 返回一個正確類型的對象

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();
    }
}

運行代碼時,我看到錯誤消息“沒有為此對象定義無參數構造函數”。 在運行時單步執行代碼會發現映射對所有屬性都很好,直到 VehicleViewModel.MODElForeignKey。

有一些關於映射 VehicleViewModel.ModelForeignKey -> Vehicle.ModelForeignKey 的東西我現在看不到。 就像我之前說的,我意識到屬性是不同的類型,但是解析器應該處理這個問題。 有任何想法嗎?

更新- 對此有一個建議 - DI 配置不正確。 制作了一個詳細介紹問題及其解決方案的快速視頻https://youtu.be/tGU7TjDvSK8

youtu.be/tGU7TjDvSK8

不是我的答案,我只是制作了一個視頻以使其非常清晰。 - 我想感謝 Lucian Bargaoanu 提供了真正的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM