2012-01-26 1 views
1

1に複数のプロパティをマッピング:Automapper、私の現在のコードが動作しているW/O ValueResolver

map.ForMember(x => x.Address, m => m.ResolveUsing(l => { 
    var engine = new MappingEngine((IConfigurationProvider)cfg); 
    var adress = engine.Map<AddressDto>(l.ContactInfo); 
    engine.Map(l.Address, adress); 
    return adress; 
})); 

を私は別の方法、のようなものがあるかもしれないと思った:

map.ForMember(x => x.Address, m => m.MapFrom(x => x.ContactInfo)); 
map.ForMember(x => x.Address, m => m.MapFrom(x => x.Address)); 

しかし、最後のForMemberは既存のマップをオーバーライドするようです。

私は、AddressとContactInfoのプロパティを、ListDto.Addressの1つのオブジェクトに結合しようとしています。

void Main() 
{ 
    var map = Mapper.CreateMap<Listing, ListingDto>(); 
    var cfg = Mapper.Configuration; 
    map.ForMember(x => x.Address, m => m.ResolveUsing(l => { 
     var engine = new MappingEngine((IConfigurationProvider)cfg); 
     var adress = engine.Map<AddressDto>(l.ContactInfo); 
     engine.Map(l.Address, adress); 
     return adress; 
    })); 

    Mapper.CreateMap<Address, AddressDto>() 
    .ForMember(x => x.Latitude, x => x.Ignore()); 
    Mapper.CreateMap<ContactInfo, AddressDto>() 
    .ForMember(x => x.Street, x=> x.Ignore()); 

    Mapper.Map<ListingDto>(new Listing{ 
    Name="Foo", 
    Address = new Address{Street = "Street"}, 
    ContactInfo = new ContactInfo{ Latitude = "latitude"}}).Dump(); 
} 

// Define other methods and classes here 
public class Listing{   
    public string Name { get; set; } 
    public Address Address { get; set; } 
    public ContactInfo ContactInfo {get;set;} 
} 

public class ContactInfo{ 
    public string Latitude {get;set;} 
} 
public class Address{ 
    public string Street {get;set;} 
} 


public class AddressDto{ 
    public string Latitude {get;set;} 
    public string Street {get;set;} 
} 

public class ListingDto{ 
    public string Name { get; set; } 
    public AddressDto Address {get;set;} 
} 

の.dump()<は - このような何かが動作するはずlinqpadから出力

答えて

5

にある:

.ForMember(x => x.Address, o => o.MapFrom(
    s => new AddressDto { 
     Latitude = s.ContactInfo.Latitude, 
     Street = s.Address.Street })); 
関連する問題