Sto utilizzando la seguente mappatura per mappare il mio oggetto dati sull'oggetto viewmodel.C# Automapper Come risolvere l'utilizzo della proprietà da customresolver
ObjectMapper.cs
public static class ObjectMapper
{
public static void Configure()
{
Mapper.CreateMap<User, UserViewModel>()
.ForMember(dest => dest.Title,
opt => opt.ResolveUsing<TitleValueResolver>())
.ForMember(dest => dest.Name,
opt => opt.ResolveUsing<NameValueResolver >())
.ForMember(dest => dest.ShortName,
opt => opt.ResolveUsing<ShortNameValueResolver >());
}
}
Parser
public class Parser{
public string GetTitle(string title){
/* add some logic */
return title;
}
public string GetName(string title){
/* add some logic */
return name;
}
public string GetShortName(string title){
/* add some logic */
return shortname;
}
}
AutoMapperCustomResolvers.cs
public class TitleValueResolver : ValueResolver<User, string>
{
private readonly BaseValueResolver _baseResolver;
public TitleValueResolver()
{
_baseResolver = new BaseValueResolver();
}
protected override string ResolveCore(Usersource)
{
return _baseResolver.Parser.GetTitle(source.TITLE);
}
}
public class NameValueResolver : ValueResolver<User, string>
{
private readonly BaseValueResolver _baseResolver;
public NameValueResolver()
{
_baseResolver = new BaseValueResolver();
}
protected override string ResolveCore(Usersource)
{
return _baseResolver.Parser.GetName(source.TITLE);
}
}
public class ShortNameValueResolver : ValueResolver<User, string>
{
private readonly BaseValueResolver _baseResolver;
public ShortNameValueResolver()
{
_baseResolver = new BaseValueResolver();
}
protected override string ResolveCore(Usersource)
{
return _baseResolver.Parser.GetShortName(source.TITLE);
}
}
Sto usando il codice qui sopra per aggiungere la logica per la proprietà di destinazione utilizzando il valore personalizzato separata risolutori. Non sono sicuro che questo sia l'approccio giusto.
i) Esiste un modo migliore per raggiungere questo obiettivo?
ii) E come utilizzare l'unità da risolvere nel caso in cui si desideri iniettare una dipendenza dal costruttore del resolver personalizzato?
Grazie
Come ci si aspetta che 'TitleValueResolver' sia costruito? Non ha un costruttore predefinito e non si fornisce un'espressione 'ConstructedBy' per la propria configurazione di mapping. In generale, il tuo esempio è severamente privo di classi ...per favore riduci o fornisci i pezzi mancanti per trasformare il tuo esempio in un ruolo. – grek40
@ grek40, ho aggiornato la mia domanda. –
'TypeValueResolver' è il nuovo' TitleValueResolver'? Come ti aspetti che un risolutore di valori per 'MAMAsset' risolva qualcosa che proviene dal tipo' Utente'? – grek40