对象映射器


1、获得实例

  要使用对象映射器,首先得获取到它的实例。我们不推荐使用 new 构造一个实例,而是使用 ObjectMapperFactory 工厂类来创建一个实例。该工厂类提供一个 CreateMapper 方法,可以接收一个 configName 参数,这个参数对应对象映射器配置(可参考 配置与扩展)中配置项的名称,如果未配置对象映射器配置项,则返回默认的对象映射器单例。如下所示:

[TestMethod]
public void TestCreateMapper()
{
    var mapper = ObjectMapperFactory.CreateMapper();
    Assert.IsNotNull(mapper); // DefaultObjectMapper
}

  在使用 IOC 的环境中,也可以通过构造注入或属性注入得到 IObjectMapper 的实例。如下所示:

public class HomeController : Controller
{
    private readonly IObjectMapper _objectMapper;
    
    public HomeController(IObjectMapper objectMapper)
    {
        _objectMapper = objectMapper;
    }
}

2、使用方法

  IObjectMapper 接口定义了将源对象转换为一个目标对象的 Map 方法。如下所示:

public class PersonModel
{
    public string Name { get; set; }
    
    public int Sex { get; set; }
}

public class PersonDto
{
    public string Name { get; set; }
    
    public int Sex { get; set; }
}

[TestMethod]
public void TestMap()
{
    var model = new PersonModel { Name = "fireasy" };
    var mapper = ObjectMapperFactory.CreateMapper();
    var dto = mapper.Map<PersonModel, PersonDto>(model);
    Assert.AreEqual(dto.Name, model.Name);
}

  Map 方法的另一个重载是将源对象映射到已有的目标对象。如下所示:

[TestMethod]
public void TestMapTo()
{
    var model = new PersonModel { Name = "fireasy" };
    var dto = new PersonDto();
    var mapper = ObjectMapperFactory.CreateMapper();
    mapper.Map(model, dto);
    Assert.AreEqual(dto.Name, model.Name);
}