对于我的对象,我使用的是具有 BrokenRulesCollection 属性的 Csla。我想将其转换为我自己的具有 StatusMessages 属性的 DTO。
我创建了自己的解析器:
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 将提供的源值重定向到值解析器。
有什么建议么?
编辑:
作为跟进,我也尝试创建一个转换但仍然得到相同的消息:
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>();