[英]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.