我将使用以下映射方式将我的数据对象映射到视图模型对象中。
ObjectMapper.cs
我使用上述代码,使用单独的自定义值解析器来添加目标属性的逻辑。不确定这是否是正确的方法。
i)有更好的方法吗?
ii)如果我想将一些依赖项注入到自定义解析器构造函数中,如何使用Unity进行解析?
谢谢
ObjectMapper.cs
public static class ObjectMapper
{
public static void Configure()
{
Mapper.CreateMap<User, UserViewModel>()
.ForMember(dest => dest.Title,
opt => opt.ResolveUsing<TitleValueResolver>())
.ForMember(dest => dest.Name,
opt => opt.ResolveUsing<NameValueResolver >())
.ForMember(dest => dest.ShortName,
opt => opt.ResolveUsing<ShortNameValueResolver >());
}
}
解析器
public class Parser{
public string GetTitle(string title){
/* add some logic */
return title;
}
public string GetName(string title){
/* add some logic */
return name;
}
public string GetShortName(string title){
/* add some logic */
return shortname;
}
}
AutoMapperCustomResolvers.cs
public class TitleValueResolver : ValueResolver<User, string>
{
private readonly BaseValueResolver _baseResolver;
public TitleValueResolver()
{
_baseResolver = new BaseValueResolver();
}
protected override string ResolveCore(Usersource)
{
return _baseResolver.Parser.GetTitle(source.TITLE);
}
}
public class NameValueResolver : ValueResolver<User, string>
{
private readonly BaseValueResolver _baseResolver;
public NameValueResolver()
{
_baseResolver = new BaseValueResolver();
}
protected override string ResolveCore(Usersource)
{
return _baseResolver.Parser.GetName(source.TITLE);
}
}
public class ShortNameValueResolver : ValueResolver<User, string>
{
private readonly BaseValueResolver _baseResolver;
public ShortNameValueResolver()
{
_baseResolver = new BaseValueResolver();
}
protected override string ResolveCore(Usersource)
{
return _baseResolver.Parser.GetShortName(source.TITLE);
}
}
我使用上述代码,使用单独的自定义值解析器来添加目标属性的逻辑。不确定这是否是正确的方法。
i)有更好的方法吗?
ii)如果我想将一些依赖项注入到自定义解析器构造函数中,如何使用Unity进行解析?
谢谢
TitleValueResolver
?它没有默认构造函数,而且你没有为映射配置提供一个ConstructedBy
表达式。一般来说,你的示例严重缺少类...请减少或提供缺失的部分,以将你的示例转换为MVCE。 - grek40