0

私はモデルを持っています

public class Product : BaseEntity
    {
        private string _name;

        public string Name
        {
            get { return _name; }
            private set{_name = value;}
        }

        public decimal Price { get; set; }
        public double Weight { get; set; }
        public double Width { get; set; }
        public double Height { get; set; }
        public double Depth { get; set; }
        public DateTime DateAdded { get; set; }
        ...
        public string GeneralInfo {get{//some get logic}...}
}

およびビュー モデル:

public sealed class ProductDetailsModel
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public decimal Price { get; set; }
        public double Weight { get; set; }
        public double Width { get; set; }
        public double Height { get; set; }
        public double Depth { get; set; }
        ...
        public string GeneralInfo {get;set;}
}

およびコントローラー:

public class ProductController : Controller
{
  ...

public ActionResult Details(int id)
        {
            var product = _productRepository.GetProduct(id);
            var productViewModel = Mapper.Map<ProductDetailsModel>(product);
            return View(productViewModel);
        }
  ...
}

すべてがうまく機能しますが...データベースからこの一般情報を取得する製品モデルの一般情報プロパティの取得ロジックがいくつかありますが、製品に一般情報がない場合、このプロパティはnullを返すことがあります。私が必要としているのは、With、Height などの利用可能なプロパティから代替の一般情報を生成することです。

private string GenerateGeneralInfoFromProductProperties()
        {
            var generalInfoStringBuilder = new StringBuilder();
            generalInfoStringBuilder.Append(@"<b>Width: </b>").Append(Width).Append("</br>");
            generalInfoStringBuilder.Append(@"<b>Weight: </b>").Append(Weight).Append("</br>");
            ...
            return generalInfoStringBuilder.ToString();
        }

このロジックを製品モデルに追加すると...

public class Product : BaseEntity
{
    ...
    public string GeneralInfo
        {
            get
            {
                var gInfo = getGeneralInfoFromBD();
                if (gInfo==null) 
                     gInfo = GenerateGeneralInfoFromProductProperties();
                return gInfo;
            }
            set { SetPropertyValue(ProductPropertyType.GeneralInfo, value); }
        }
}

すべて正常に動作しますが、製品の詳細を表現するためのビュー モデルがあるため、間違っていて非論理的です。このロジックをビュー モデルに追加したいのですが、ビュー モデル インスタンスはマッパーによって作成され、製品ビュー モデルには何もありません。私が言ったように、コンストラクターでは必要がないため、コンストラクターは製品インスタンスを渡して一般的な情報を取得します。この「nullの場合の一般情報」置換ロジックをマッパーまたはビューモデルに追加するにはどうすればよいですか?

4

1 に答える 1

0

AfterMap を試す

Automapper.CreateMap<Product,ProductDetailsModel>()
    .AfterMap((p,pm) => {  
       // now you have access to both objects, so you can do whatever you please
     });
于 2012-11-30T03:29:59.367 に答える