プロジェクトで Automapper を使用しているため、宛先オブジェクトのフィールドを動的に有効化する必要があります。
私の構成では、似たようなものがあります:
cfg.CreateMap<Message, MessageDto>()
// ...
.ForMember(dest => dest.Timestamp, opt => opt.MapFrom(src => src.SentTime.AddMinutes(someValue)))
//...
;
構成コードのsomeValue
は、実行時にマッパーに渡す必要があるパラメーターであり、ソースオブジェクトのフィールドではありません。
これを達成する方法はありますか?このようなもの:
Mapper.Map<MessageDto>(msg, someValue));
あなたが望むことを正確に行うことはできませんが、Mapを呼び出すときにマッピングオプションを指定することで、かなり近いものを得ることができます。設定内のプロパティを無視します。
cfg.CreateMap<Message, MessageDto>()
.ForMember(dest => dest.Timestamp, opt => opt.Ignore())
;
次に、マップを呼び出すときにオプションを渡します。
int someValue = 5;
var dto = Mapper.Map<Message, MessageDto>(message, opt =>
opt.AfterMap((src, dest) => dest.TimeStamp = src.SendTime.AddMinutes(someValue)));
この構文を使用するには、Mapper.Map<TSrc, TDest>
オーバーロードを使用する必要があることに注意してください。
Mapメソッドの使用中に考えられる別のオプションは、Itemsディクショナリの使用です。例:
int someValue = 5;
var dto = Mapper.Map<Message>(message,
opts => opts.Items["Timestamp"] = message.SentTime.AddMinutes(someValue));
コードが少し少なく、動的に指定されたフィールドの利点があります。