C# AutoMapper DynamicMap与接口上的DataReader

C# AutoMapper DynamicMap与接口上的DataReader,c#,unity-container,automapper,C#,Unity Container,Automapper,我对AutoMapper比较陌生,但发现它在将WCF服务中的对象转换为DTO(某种意义上)方面非常强大 今天我遇到了一个我认为应该有效的情况,但失败了。我在大多数地方都是针对接口编程的,我的很多映射(有效)实际上是将EF实体映射到DTO的接口(即Mapper.CreateMap();) 然而,我遇到了一个情况,我有一个数据表,我想使用AutoMapper来转换它。我很快发现了一些看起来很有希望的样本,但它们一直失败,例外情况相对模糊(至少对我来说) 作为测试,我更改了DynamicMap调用以使

我对AutoMapper比较陌生,但发现它在将WCF服务中的对象转换为DTO(某种意义上)方面非常强大

今天我遇到了一个我认为应该有效的情况,但失败了。我在大多数地方都是针对接口编程的,我的很多映射(有效)实际上是将EF实体映射到DTO的接口(即Mapper.CreateMap();)

然而,我遇到了一个情况,我有一个数据表,我想使用AutoMapper来转换它。我很快发现了一些看起来很有希望的样本,但它们一直失败,例外情况相对模糊(至少对我来说)

作为测试,我更改了DynamicMap调用以使用DTO的具体实现,它成功地工作了。我最初没有这样做,因为我之前创建的所有接口映射都是由我的IoC容器(Unity 3.x)解析的

有没有办法让这个特定的映射使用接口工作,或者在执行返回集合的动态映射时必须使用具体类

失败:

AutoMapper.Mapper.DynamicMap<IDataReader, IEnumerable<IPunctuationMapDto>>(table.CreateDataReader());
IPuncTurationMapdTo:

public interface IPunctuationMapDto
{
    int Id { get; set; }


    string TaggedValue { get; set; }


    int UntaggedValue { get; set; }
}

汽车制造商Jimmy Bogard在另一个论坛上回答说:

数据读取器映射器不支持接口,只支持具体类。这是因为数据读取器映射器是使用reflection.emit实现的,以提高速度

[DataContract]
public class PunctuationMapDto : IPunctuationMapDto
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string TaggedValue { get; set; }

    [DataMember]
    public int UntaggedValue { get; set; }
}
public interface IPunctuationMapDto
{
    int Id { get; set; }


    string TaggedValue { get; set; }


    int UntaggedValue { get; set; }
}