1 安装AutoMapper库
在ASP.NET Core项目中,使用NuGet包管理器安装AutoMapper库,或者在Package Manager Console中运行以下命令:
Install-Package AutoMapper
<ItemGroup>
<PackageReference Include="AutoMapper" Version="12.0.1" />
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
</ItemGroup>
2 创建映射配置
在项目的根目录下创建一个映射配置类,该类将定义对象之间的映射关系。例如,以下是一个简单的映射配置类:
using AutoMapper;
using WorldSystem.Api.Models.Entities;
using WorldSystem.Api.Models.Services.User.Dto;
namespace WorldSystem.Api.Configs
{
public class AutoMapperConfig:Profile
{
public AutoMapperConfig()
{
CreateMap<UserInfoDto, LoginDto>().ReverseMap();
CreateMap<UserInfo, UserInfoDto>().ReverseMap();
CreateMap<UserInfoInput, UserInfo>();
}
}
}
3 在启动代码中注册映射配置
在ASP.NET Core的启动代码(通常是Startup.cs文件)中注册映射配置。在Startup类的构造函数中添加以下代码:
public static void Main(string[] args)
{
//创建数据库
SqlSugarHelper.CodeFirst();
var builder = WebApplication.CreateBuilder(args);
// 注册服务
#region 日志服务配置
builder.Logging.AddLog4Net("CfgFiles/log4net.config");
#endregion
#region 数据库
//注册SqlSugar用AddScoped
builder.Services.AddScoped<ISqlSugarClient>(s =>
{
//Scoped用SqlSugarClient
SqlSugarClient sqlSugar = new SqlSugarClient(new ConnectionConfig()
{
DbType = SqlSugar.DbType.SqlServer,
ConnectionString = builder.Configuration.GetConnectionString("DbSqlServer"),
IsAutoCloseConnection = true,
},
//SqlSugarClient sqlSugar = new SqlSugarClient(new ConnectionConfig()
//{
// DbType = SqlSugar.DbType.Sqlite,
// ConnectionString = "DataSource=world_system.db",
// IsAutoCloseConnection = true,
//},
db =>
{
//单例参数配置,所有上下文生效
db.Aop.OnLogExecuting = (sql, pars) =>
{
//获取IOC对象不要求在一个上下文
//vra log=s.GetService<Log>()
//获取IOC对象要求在一个上下文
//var appServive = s.GetService<IHttpContextAccessor>();
//var log= appServive?.HttpContext?.RequestServices.GetService<Log>();
};
});
return sqlSugar;
});
#endregion
#region automapper
builder.Services.AddAutoMapper(typeof(AutoMapperConfig));
#endregion
#region 自定义服务
builder.Services.AddTransient<IUserInfoService, UserInfoService>();
#endregion
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// 配置请求管道
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseAuthorization();
app.MapControllers();
app.Run();
}
或者
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
// Add other services here...
services.AddAutoMapper(typeof(AutoMapperConfig));
}
在上面的代码中,我们使用AddAutoMapper方法将映射配置注册到服务容器中。
4 使用映射器进行数据转换
现在可以在需要的地方使用AutoMapper进行数据转换。例如,在业务服务中可以使用以下代码将领域模型转换为视图模型:
using AutoMapper;
using SqlSugar;
using WorldSystem.Api.Common.Db;
using WorldSystem.Api.Models.Entities;
using WorldSystem.Api.Models.Services.User.Dto;
namespace WorldSystem.Api.Models.Services.User
{
public class UserInfoService : IUserInfoService
{
private readonly ISqlSugarClient _db;
private readonly IMapper _mapper;
public UserInfoService(ISqlSugarClient db ,IMapper mapper)
{
this._db = db;
this._mapper = mapper;
}
public async Task<UserInfoDto> CheckLogin(LoginDto loginDto)
{
UserInfo userInfo = await _db.Queryable<UserInfo>().FirstAsync(p => p.QQ.Equals(loginDto.QQ) && p.Password.Equals(loginDto.Password));
UserInfoDto userInfoDto=_mapper.Map<UserInfoDto>(userInfo);
return userInfoDto;
}
}
}
在上面的代码中,我们使用Mapper.Map方法将Source对象映射到Destination对象,并将结果传递给视图。
这是一个简单的示例,您可以根据需要进行更多的映射配置和调整。