【发布时间】:2013-11-21 16:11:52
【问题描述】:
我对 AutoMapper 比较陌生,但发现它在将 WCF 服务中的对象转换为 DTO 方面非常强大(有点意思)。
今天我遇到了一个我认为应该工作但失败的情况。我在大多数地方都针对接口进行编程,并且我的很多地图(有效)实际上将 EF 实体映射到我的 DTO 的接口(即 Mapper.CreateMap();)。
但是我遇到了一种情况,我有一个数据表,我想使用 AutoMapper 来转换它。我很快找到了一些看起来很有希望的样本,但它们总是以相对模糊的例外(至少对我而言)失败。
作为测试,我更改了 DynamicMap 调用以使用 DTO 的具体实现,它成功运行。我最初没有走这条路,因为我之前针对由我的 IoC 容器 (Unity 3.x) 解析的接口创建的所有映射都有效。
有没有办法让这个特定的地图使用接口工作,或者在做返回集合的动态地图时我必须使用具体的类吗?
失败:
AutoMapper.Mapper.DynamicMap<IDataReader, IEnumerable<IPunctuationMapDto>>(table.CreateDataReader());
工作:
AutoMapper.Mapper.DynamicMap<IDataReader, IEnumerable<PunctuationMapDto>>(table.CreateDataReader());
PunctuationMapperDto:
[DataContract]
public class PunctuationMapDto : IPunctuationMapDto
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string TaggedValue { get; set; }
[DataMember]
public int UntaggedValue { get; set; }
}
IPunctuationMapDto:
public interface IPunctuationMapDto
{
int Id { get; set; }
string TaggedValue { get; set; }
int UntaggedValue { get; set; }
}
【问题讨论】:
标签: c# unity-container automapper