ASP.NET Core Blazor 使用 AutoMapper
建立Blazor Server 應用程式專案
- 開啟 Visual Studio 2022
- 選擇右下方的 [建立新的專案] 按鈕
- 在 [建立新專案] 對話窗中
- 從右上方的專案類型下拉按鈕中,找到並選擇 [Web]
- 從可用專案範本清單內,找到並選擇 [Blazor Server 應用程式]
- 點選左下方 [下一步] 按鈕
- 在 [設定新的專案] 對話窗中
- 在 [專案名稱] 欄位中輸入
bzAutoMapper
- 點選左下方 [下一步] 按鈕
- 在 [其他資訊] 對話窗中
- 在 [目標 Framework] 下拉選單中,選擇 [.NET 6.0 (目前)]
- 點選左下方 [建立] 按鈕
安裝 AutoMapper 套件
- 滑鼠右擊專案節點
- 從彈出功能表清單中點選 [管理 NuGet 套件]
- 在 [NuGet: bzAutoMapper] 視窗中點選 [瀏覽] 標籤頁次
- 在文字輸入盒中輸入此套件名稱
AutoMapper.Extensions.Microsoft.DependencyInjection
- 選擇作者為 [Jimmy] 的 [AutoMapper.Extensions.Microsoft.DependencyInjection] 套件選項
- 安裝此套件該專案內
建立測試用的兩個類別
- 滑鼠右擊 [Pages] 資料夾
- 從彈出功能表清單中點選 [加入] > [類別]
- 在 [新增項目 - bzAutoMapper] 對話窗下方的 [名稱] 欄位輸入
MyModel.cs
- 點選右下方 [新增] 按鈕來新增這個類別
- 使用底下程式碼來替換這個類別的定義
public class MyModel
{
public int MyInt { get; set; }
public string MyString { get; set; }
public DateOnly MyDateOnly { get; set; }
}
- 滑鼠右擊 [Pages] 資料夾
- 從彈出功能表清單中點選 [加入] > [類別]
- 在 [新增項目 - bzAutoMapper] 對話窗下方的 [名稱] 欄位輸入
MyModelDto.cs
- 點選右下方 [新增] 按鈕來新增這個類別
- 使用底下程式碼來替換這個類別的定義
public class MyModelDto
{
public int MyInt { get; set; }
public string MyString { get; set; }
public DateOnly MyDateOnly { get; set; }
}
建立 AutoMapper Profile 類別
- 滑鼠右擊 [Pages] 資料夾
- 從彈出功能表清單中點選 [加入] > [類別]
- 在 [新增項目 - bzAutoMapper] 對話窗下方的 [名稱] 欄位輸入
AutoMapping.cs
- 點選右下方 [新增] 按鈕來新增這個類別
- 使用底下程式碼來替換這個類別的定義
using AutoMapper;
public class AutoMapping : Profile
{
public AutoMapping()
{
CreateMap<MyModel, MyModelDto>();
CreateMap<MyModelDto, MyModel>();
}
}
註冊 AutoMapper 服務到相依性注入容器內
在專案根目錄下找到並且打開 [Program.cs] 檔案
找到
builder.Services.AddSingleton<WeatherForecastService>();
敘述在其下方加入
builder.Services.AddAutoMapper(c => c.AddProfile<AutoMapping>());
敘述記得要加入相關的命名空間參考敘述
開始使用 AutoMapper
- 在 [Pages] 資料夾下找到並打開 [Index.razor]
- 將這個 Razor 元件替換為底下內容
@page "/"
@using AutoMapper
@inject IMapper Mapper
@code {
protected override void OnAfterRender(bool firstRender)
{
if (firstRender == true)
{
MyModel myModel = new MyModel()
{
MyDateOnly = DateOnly.FromDateTime(DateTime.Now.AddDays(5)),
MyInt = 168,
MyString = "New MyModel"
};
Console.WriteLine($"New MyModel Hash:{myModel.GetHashCode()} Int:{myModel.MyInt} Date:{myModel.MyDateOnly} String:{myModel.MyString}");
MyModelDto myModelDto = Mapper.Map<MyModelDto>(myModel);
myModelDto.MyInt = 999;
myModelDto.MyString = "Mapper From MyModel";
myModelDto.MyDateOnly = DateOnly.FromDateTime(DateTime.Now.AddDays(-5));
Console.WriteLine($"New MyModel Hash:{myModel.GetHashCode()} Int:{myModel.MyInt} Date:{myModel.MyDateOnly} String:{myModel.MyString}");
Console.WriteLine($"Mapper MyModel to MyModelDto Hash:{myModelDto.GetHashCode()} Int:{myModelDto.MyInt} Date:{myModelDto.MyDateOnly} String:{myModelDto.MyString}");
}
}
}
執行並且看結果
- 底下是執行後的主控台所輸出的文字
info: Microsoft.Hosting.Lifetime[14]
Now listening on: https://localhost:7140
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://localhost:5140
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: D:\Vulcan\Projects\BlazorApp7\
New MyModel Hash:5773521 Int:168 Date:2022/1/2 String:New MyModel
New MyModel Hash:5773521 Int:168 Date:2022/1/2 String:New MyModel
Mapper MyModel to MyModelDto Hash:6630602 Int:999 Date:2021/12/23 String:Mapper From MyModel
沒有留言:
張貼留言