次のクラスとリゾルバーを考えると、なぜこのエラーが発生するのですか?ProductAddModelが渡される理由がまったくわかりません。
AutoMapper.AutoMapperMappingExceptionはユーザーコードによって処理されませんでした
Message=提供された値はタイプSystem.Decimalですが、AuctionCMS.Framework.Models.Admin.ProductAddModelが必要です。値リゾルバーのソースタイプを変更するか、FromMemberを使用して提供されたソース値を値リゾルバーにリダイレクトします。
タイプ:
public class Currency
{
public Int64 Value { get; set; }
// Spot saved for currency type and any other extra properties
}
public class Product
{
public Currency Price { get; set; }
public Currency ReservePrice { get; set; }
}
public class ProductAddModel
{
public Decimal Price { get; set; }
public Decimal ReservePrice { get; set; }
}
リゾルバーコード:
public class DecimalToCurrencyValueResolver : ValueResolver<decimal, Currency>
{
#region Overrides of ValueResolver<decimal,Currency>
protected override Currency ResolveCore(decimal source)
{
return new Currency() { Value = (Int64)((decimal)source) * 1000 };
}
#endregion
}
public class CurrencyToDecimalValueResolver : ValueResolver<Currency, decimal>
{
#region Overrides of ValueResolver<decimal,Currency>
protected override decimal ResolveCore(Currency source)
{
return (decimal)source.Value * 1000;
}
マッピングコード:
Mapper.CreateMap<ProductAddModel, Product>()
.ForMember(x => x.Price, opt => opt.ResolveUsing<DecimalToCurrencyValueResolver>())
.ForMember(x => x.ReservePrice, opt => opt.ResolveUsing<DecimalToCurrencyValueResolver>());
Mapper.CreateMap<Product, ProductAddModel>()
.ForMember(x => x.Price, opt => opt.ResolveUsing<CurrencyToDecimalValueResolver>())
.ForMember(x => x.ReservePrice, opt => opt.ResolveUsing<CurrencyToDecimalValueResolver>());
var model = new ProductAddModel();
var product = new Product();
Mapper.Map<ProductAddModel, Product>(model, product);
私は何を間違っていますか?このアプローチは、マッピングプロセス中に単純な変換を処理するための最良の方法ですか?
ありがとう!