我有以下的代码,当从源对象中将 DateUtc
转换为目标对象中的 Date
时,我想要应用一个转换。现在我编写的转换器只能针对特定字段工作,因为它已经被指定了。
我希望我的转换器更加灵活,可以传递其他对象而不仅限于 SourceDto1
和 DestDto1
,例如 SourceDto2
和 DestDto2
。
public class SourceDto1
{
public DateTime DateUtc {get;set;}
}
public class DestDto1
{
public DateTime Date {get;set;}
}
public class SourceDto2
{
public DateTime DateUtc {get;set;}
}
public class DestDto2
{
public DateTime Date {get;set;}
}
转换器
public class AttachmentCreatedDateResolver : IValueResolver<SourceDto1, DestDto1 DateTime>
{
private readonly Settings _settings;
public AttachmentCreatedDateResolver(Settings settings)
{
_settings = settings;
}
public DateTime Resolve(SourceDto1 source, DestDto1 destination, DateTime destMember, ResolutionContext context)
{
TimeZoneInfo tzi = TZConvert.GetTimeZoneInfo(_settings.TimeZone);
var converted = TimeZoneInfo.ConvertTimeFromUtc(source.DateUtc, tzi);
return converted;
}
}
我想我不想为我需要在属性之间进行日期转换的每对对象创建不同的解析器类。
ITypeConverter
可能有效,但我不确定如何从 DI 注入我的 Settings
。
IValueResolver
。然后,映射可以简单地为CreateMap<ISrc, IDest>().ForMember(...).IncludeAllDerived()
。这将涵盖所有实现DTO。 - NPras