型号名称:UserModelInsert
实体名称:用户
CreateMap<UserModelInsert, User>()
.ForMember(
dest => dest.Password,
src => src.MapFrom(?????????????????))
我已经以各种方式冒险尝试获得正确的结果。我已经创建了继承接口IValueResolver,IMemberValueResolver以及所有你能想象的类的类,但遗憾的是我无法解决这个问题。
我只需要这样的内容:CreateMap<UserModelInsert, User>().ForMember(dest => dest.Password, src => src.MapFrom(s => StringUtils.Encrypt(s.Password)))
但它无效
答案 0 :(得分:1)
OP:
我只需要这样的内容:
CreateMap<UserModelInsert, User>().ForMember(dest => dest.Password, src => src.MapFrom(s => StringUtils.Encrypt(s.Password)))
但它无效
只需使用AutoMapper的Custom Type Converters功能。
有时,您需要完全控制一种类型到另一种类型的转换。这通常是当一种类型看起来与另一种类型不同时,转换功能已经存在,并且您希望从&#34;更宽松的&#34;键入更强类型,例如到目标类型Int32的字符串的源类型。
e.g。 AutoMap的courtesy
Mapper.Initialize(cfg => {
cfg.CreateMap<string, int>().ConvertUsing(s => Convert.ToInt32(s));
cfg.CreateMap<string, DateTime>().ConvertUsing(new DateTimeTypeConverter());
cfg.CreateMap<string, Type>().ConvertUsing<TypeTypeConverter>();
cfg.CreateMap<Source, Destination>();
});
public class DateTimeTypeConverter : ITypeConverter<string, DateTime>
{
public DateTime Convert(string source, DateTime destination, ResolutionContext context)
{
return System.Convert.ToDateTime(source);
}
}
没有什么可以阻止您创建自己的MyPasswordConverter
,将string
转换为SecureString
。
所以以你的例子为例,你可以产生类似的东西:
public class MyPasswordConverter: ITypeConverter<string, SecureString>
{
public SecureString Convert(string source, SecureString destination, ResolutionContext context)
{
return StringUtils.Encrypt(source);
}
}
...当然假设您的StringUtils.Encrypt
返回SecureString
(可能应该这样)。