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