オブジェクトには、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>();