Automapper une source vers plusieurs destinations
Ci-dessous ma classe
class Dest1
{
string prop1;
string prop2;
strig prop3;
public Dest2 Dest2 {get;set;}
pubic List<Dest3> Dest3 {get;set;}
}
class Dest2
{
string prop4;
string prop5;
strig prop6;
}
class Dest3
{
string prop7;
}
class Source1
{
string prop1;
string prop2;
string prop3;
string prop4;
}
class Source2
{
string prop7;
}
J'ai besoin de cartographier
Q1. classe source1 à classe Dest1 (j'ai également besoin de mapper l'objet dest2)
Éditer:
Q2. Je dois faire la carte Dest1 vers la Source 1 (carte inversée)
J'utilise .net core et auto mapper .. suis nouveau sur automapper & .net core .. Merci d'avance
Réponses
AutoMapper peut mapper autant de sources vers autant de destinations que vous le souhaitez, en supposant que vous configuriez le mappage. Par exemple, votre scénario demandé:
var configuration = new MapperConfiguration(cfg =>
// Mapping Config
cfg.CreateMap<Source1, Dest2>()
.ForMember(dest => dest.prop5, opt => opt.Ignore())
.ForMember(dest => dest.prop6, opt => opt.Ignore());
cfg.CreateMap<Source1, Dest1>()
.ForMember(dest => dest.Dest2, opt => opt.MapFrom(src => src));
// Reverse Mapping Config
cfg.CreateMap<Dest1, Source1>()
.ForMember(dest => dest.prop4,
opt => opt.MapFrom(src => (src?.Dest2 != null) // ?. w/c#6
? src.Dest2.prop4 // map if can
: null)); // otherwise null
);
// Check AutoMapper configuration
configuration.AssertConfigurationIsValid();
Les propriétés portant le même nom seront automatiquement mappées. Toutes les propriétés de destination qui n'ont pas de propriété source correspondante devront être ignorées.
Une fois que votre AutoMapper est configuré, vous pouvez mapper selon vos besoins à l'aide de l'interface IMapper.
public class Foo {
private IMapper _mapper;
public Foo(IMapper mapper) {
_mapper = mapper;
}
// Map Source1 -> Dest1
public Dest1 Bar(Source1 source) {
return _mapper.Map<Dest1>(source);
}
// Map Dest1 -> Source1
public Source1 Baz(Dest1 dest) {
return _mapper.Map<Source1>(dest);
}
}