Для моих объектов я использую Csla, у которого есть свойство BrokenRulesCollection. Я хотел бы преобразовать это в свой собственный DTO, у которого есть свойство StatusMessages.Сопоставление списка одного типа, другому
Я создал свой собственный распознаватель:
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;
}
}
И в отображении, я позволяю это знать, какое решающее использовать:
Mapper.CreateMap<DomainObjects.Members.IMemberRegistration, DTO.Members.MemberRegistrationForm>()
.ForMember(src => src.StatusMessages, opt => opt.ResolveUsing <BrokenRulesCollectionResolver>());
Однако, когда я пытаюсь сделать отображение:
return Mapper.Map<DomainObjects.Members.IMemberRegistration, DTO.Members.MemberRegistrationForm>(memberRegistration);
Я получаю следующее сообщение об ошибке:
Приведенное значение имеет тип Csla.Validation.BrokenRulesCollection, но ожидается Favs.DomainObjects.Members.MemberRegistration. Измените тип источника распознавателя значения или перенаправьте исходное значение, заданное в преобразователь значения, используя функцию FromMember.
Любые предложения?
Edit:
В продолжение, я также пытался создать новообращенный, но все еще получаю такое же сообщение:
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;
}
}
и настроить его следующим образом:
Mapper.CreateMap<Csla.Validation.BrokenRulesCollection, StatusMessageList>()
.ConvertUsing<BrokenRulesCollectionConverter>();
После вашего редактирования вы также удалили конфигурацию «ResolveUsing» в картографии IMemberRegistration? –