Jan*_*kan 5 c# automapper automapper-2
我正在学习如何使用AutoMapper,我在使用ValueFormatter时遇到了问题.
这是Console中的简单示例,我无法将其与NameFormatter一起使用:
class Program
{
static void Main(string[] args)
{
Mapper.Initialize(x => x.AddProfile<ExampleProfile>());
var person = new Person {FirstName = "John", LastName = "Smith"};
PersonView oV = Mapper.Map<Person, PersonView>(person);
Console.WriteLine(oV.Name);
Console.ReadLine();
}
}
public class ExampleProfile : Profile
{
protected override void Configure()
{
//works:
//CreateMap<Person, PersonView>()
// .ForMember(personView => personView.Name, ex => ex.MapFrom(
// person => person.FirstName + " " + person.LastName));
//doesn't work:
CreateMap<Person, PersonView>()
.ForMember(personView => personView.Name,
person => person.AddFormatter<NameFormatter>());
}
}
public class NameFormatter : ValueFormatter<Person>
{
protected override string FormatValueCore(Person value)
{
return value.FirstName + " " + value.LastName;
}
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class PersonView
{
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?AutoMapper是2.2.1版
您应该使用(此处ValueResolver有更多信息):
public class PersonNameResolver : ValueResolver<Person, string>
{
protected override string ResolveCore(Person value)
{
return (value == null ? string.Empty : value.FirstName + " " + value.LastName);
}
}
Run Code Online (Sandbox Code Playgroud)
你的个人资料应该是这样的:
public class ExampleProfile : Profile
{
protected override void Configure()
{
CreateMap<Person, PersonView>()
.ForMember(personView => personView.Name, person => person.ResolveUsing<PersonNameResolver>());
}
}
Run Code Online (Sandbox Code Playgroud)
据作者介绍,Formatters用于全局类型转换。您可以在这里和这里阅读他的一些回复。
我会选择你的第一个选择:
CreateMap<Person, PersonView>()
.ForMember(personView => personView.Name, ex => ex.MapFrom(
person => person.FirstName + " " + person.LastName));
Run Code Online (Sandbox Code Playgroud)
显然值格式化程序是一个错误。
| 归档时间: |
|
| 查看次数: |
2289 次 |
| 最近记录: |