gpt4 book ai didi

c# - 带有 ValueFormatter 的 AutoMapper

转载 作者:太空狗 更新时间:2023-10-29 23:23:32 26 4
gpt4 key购买 nike

我正在学习如何使用 AutoMapper,但在将它与 ValueFormatter 一起使用时遇到问题。

这是控制台中的一个简单示例,我无法将它与 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; }
}

我在这里错过了什么? AutoMapper 是 2.2.1 版本

最佳答案

您应该使用 ValueResolver(更多信息 here):

public class PersonNameResolver : ValueResolver<Person, string>
{
protected override string ResolveCore(Person value)
{
return (value == null ? string.Empty : value.FirstName + " " + value.LastName);
}
}

你的个人资料应该是这样的:

public class ExampleProfile : Profile
{
protected override void Configure()
{
CreateMap<Person, PersonView>()
.ForMember(personView => personView.Name, person => person.ResolveUsing<PersonNameResolver>());
}
}

根据作者的说法,Formatters 用于全局类型转换。你可以阅读他的一些回复 herehere .

我会选择你的第一个选项:

 CreateMap<Person, PersonView>()
.ForMember(personView => personView.Name, ex => ex.MapFrom(
person => person.FirstName + " " + person.LastName));

显然,值格式化程序是 mistake .

关于c# - 带有 ValueFormatter 的 AutoMapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16958661/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com