[C#]ValueInjecter之二

  • 419
  • 0
  • C#
  • 2016-12-30

ValueInjecter Map使用說明

繼上一篇寫InjectFrom的用法後,今天要介紹Map的用法,

其實兩個是很像的東西,不過Map可以更方便做客製化功能。

先來看一般的寫法

var customer = new Customer()
{
    Id = 1,
    FirstName = "Lin",
    LastName = "Miles",
    Tel = "0978123456",
    ZipCode = "476",
    Address = "台北市信義區"
};                       

// 方法一
CustomerInput customerInput = Mapper.Map<Customer, CustomerInput>(customer);

// 方法二,結果會與方法一相同
// CustomerInput customerInput = Mapper.Map<CustomerInput>(customer); 

// 結果
Console.WriteLine(customerInput.FirstName);

這個結果也是跟InjectFrom一模一樣,只要是一樣type,一樣name的property,都會複製過去,

不過Map的好處,可以有客製的功能,

當我CustomerInput,有些值要跟Customer不一樣,或者是有Customer沒包含的值需要填入,

此時我們可以使用AddMap來部分客製化

var customer = new Customer()
{
    Id = 1,
    FirstName = "Lin",
    LastName = "Miles",
    Tel = "0978123456",
    ZipCode = "476",
    Address = "台北市信義區"
};

Mapper.AddMap<Customer, CustomerInput>(src =>
{
    var res = new CustomerInput();
    res.InjectFrom(src);
    res.Tel = "02-23851234";
    return res;
});

CustomerInput customerInput = Mapper.Map<Customer, CustomerInput>(customer);

Console.WriteLine(customerInput.FirstName);
Console.WriteLine(customerInput.Tel);

上面程式碼,讀者可以看到我加入了AddMap,我設定讓Tel的值,變得不一樣

所以當我Mapper.Map的時候,Tel 就會變成 "02-23851234"。

有此客製化功能還蠻方便的,因為畢竟並不是每一個不同model都能完整複製。

參考資料:https://github.com/omuleanu/ValueInjecter

 

 

 

 

 

 

 

一天一分享,身體好健康。

該追究的不是過去的原因,而是現在的目的。