【发布时间】:2012-09-26 14:55:27
【问题描述】:
我正在尝试找到一种方法,让 Automapper 根据 Source 类型中设置的 Enum 值来选择调用映射的目标类型...
例如给定以下类:
public class Organisation
{
public string Name {get;set;}
public List<Metric> Metrics {get;set;}
}
public class Metric
{
public int NumericValue {get;set;}
public string TextValue {get;set;}
public MetricType MetricType {get;set;}
}
public enum MetricType
{
NumericMetric,
TextMetric
}
如果我有以下对象:
var Org = new Organisation {
Name = "MyOrganisation",
Metrics = new List<Metric>{
new Metric { Type=MetricType.TextMetric, TextValue = "Very Good!" },
new Metric { Type=MetricType.NumericMetric, NumericValue = 10 }
}
}
现在,我想将其映射到具有类的视图模型表示:
public class OrganisationViewModel
{
public string Name {get;set;}
public List<IMetricViewModels> Metrics {get;set;}
}
public NumericMetric : IMetricViewModels
{
public int Value {get;set;}
}
public TextMetric : IMetricViewModels
{
public string Value {get;set;}
}
对 AutoMapper.Map 的调用将生成一个包含一个 NumericMetric 和一个 TextMetric 的 OrganisationViewModel。
Automapper 调用:
var vm = Automapper.Map<Organisation, OrganisationViewModel>(Org);
我将如何配置 Automapper 以支持此功能?这可能吗? (我希望这个问题很清楚)
谢谢!
【问题讨论】:
-
我一直在看这个并一直回到
Metric<T>而不是两种类型。例如,您如何让int Value和string Value都实现 IMetricViewModels。你的界面是什么样的? -
嗨,这个例子比实际问题简单得多,MetricType 中有很多不同的类型,都包含各种不同的东西。界面是空的,只有在那里允许我列出所有将解析为不同视图模板的事物列表。 (MVC 应用程序... Html.DisplayFor(Organisation.Metrics) 将产生 6 或 7 个不同模板的列表)。这有意义还是我应该扩大问题?
标签: c# .net automapper