对于我的对象,我使用Csla,它具有BrokenRulesCollection属性。我想将其转换为具有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>();
继编辑之后,您是否还删除了IMemberRegistration映射中的“ResolveUsing”配置? – 2010-02-25 13:50:16