Pour mes objets, j'utilise Csla, qui possède une propriété BrokenRulesCollection. Je voudrais convertir cela à mon propre DTO qui a la propriété StatusMessages.Mappage d'un type à un autre
J'ai créé mon propre résolveur:
public class BrokenRulesCollectionResolver : ValueResolver<Csla.Validation.BrokenRulesCollection, StatusMessageList>
{
protected override StatusMessageList ResolveCore(Csla.Validation.BrokenRulesCollection source)
{
var messageList = new StatusMessageList();
messageList.ReadBrokenRules(source);
return messageList;
}
}
Et dans la cartographie, je le faire savoir qui résolveur à utiliser:
Mapper.CreateMap<DomainObjects.Members.IMemberRegistration, DTO.Members.MemberRegistrationForm>()
.ForMember(src => src.StatusMessages, opt => opt.ResolveUsing <BrokenRulesCollectionResolver>());
Cependant, lorsque je tente de faire la mise en correspondance:
return Mapper.Map<DomainObjects.Members.IMemberRegistration, DTO.Members.MemberRegistrationForm>(memberRegistration);
je reçois l'erreur suivante:
La valeur fournie est de type Csla.Validation.BrokenRulesCollection mais attend Favs.DomainObjects.Members.MemberRegistration. Modifiez le type de source du résolveur de valeur ou redirigez la valeur source fournie au résolveur de valeur à l'aide de FromMember.
Des suggestions?
Edit:
En guise de suivi, je l'ai aussi essayé de créer un converti, mais toujours le même message:
public class BrokenRulesCollectionConverter : ITypeConverter<Csla.Validation.BrokenRulesCollection, StatusMessageList>
{
public StatusMessageList Convert(ResolutionContext context)
{
var test = new StatusMessageList();
test.ReadBrokenRules((Csla.Validation.BrokenRulesCollection)context.SourceValue);
return test;
}
}
et le configurer comme suit:
Mapper.CreateMap<Csla.Validation.BrokenRulesCollection, StatusMessageList>()
.ConvertUsing<BrokenRulesCollectionConverter>();
Après votre modification, avez-vous également supprimé la configuration "ResolveUsing" dans le mappage IMemberRegistration? –