c# - Automapper - 在不创建具体类的情况下映射到接口(interface)类型属性

标签 c# interface proxy automapper

我希望能够映射到 IFoo.IBar.Name 而无需自己创建 IBar 类型的具体对象。 在 CreateMap 级别使用代理很容易:Mapper.CreateMap<Person, IFoo>() ,但是自定义内部接口(interface)类型成员如何实现呢?

public class Test
{
    [Fact]
    public void MapToInnerInterface()
    {
        const int id = 1;
        const string name = "Peter";
        var person = new Person {Id = id, Name = name};

        Mapper.CreateMap<Person, IFoo>()
            .ForMember(dest => dest.Bar.Name, c => c.MapFrom(src => src.Name));

        var mapResult = Mapper.Map<IFoo>(person);

        Assert.Equal(id, mapResult.Id);
        Assert.Equal(name, mapResult.Bar.Name);
    }
}

public interface IFoo
{
    int Id { get; set; }
    IBar Bar { get; set; }
}

public interface IBar
{
    string Name { get; set; }
}

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
}

最佳答案

您可以通过将外部类 (Person) 映射到内部接口(interface) (IBar),然后在 Person 中利用该映射来实现此目的code> → IFoo map 。

Mapper.CreateMap<Person, IFoo>()
    .ForMember(dest => dest.Bar, opt => opt.MapFrom(src => src));

Mapper.CreateMap<Person, IBar>();

IFoo foo = Mapper.Map<IFoo>(person);

Console.WriteLine(foo.Bar.Name); // Peter
Console.WriteLine(foo.Id); // 1

如您所料,创建了两个代理对象,一个实现了 IFoo,另一个实现了 IBar

示例: https://dotnetfiddle.net/VuyT1K

关于c# - Automapper - 在不创建具体类的情况下映射到接口(interface)类型属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26688668/

相关文章:

apache - 从 apache 到 IIS 的反向代理总是失败并显示 404

javascript - 为什么这个nodejs代理服务器挂了?

C# - 检查给定的 url 是文件还是目录?

c# - 对齐分组 GridView 中的标题和项目

java - CheckBox 中的 setChecked 和 setSelected 不起作用

c# - 编译器说我没有实现我的接口(interface),但我实现了?

python - 从 Flask 返回 requests.Response 对象

c# - 支持小数的大数

c# - 如果我不需要支持特定于语言环境的变体,我可以仅使用 zh-Hans/zh-Hant resx 文件来表示中文吗?

asp.net-mvc - ASP.NET MVC 将模型发布到具有接口(interface)的操作