04.Net6的 Webapi 添加AutoMapper使用步骤

1 安装AutoMapper库

在ASP.NET Core项目中,使用NuGet包管理器安装AutoMapper库,或者在Package Manager Console中运行以下命令:

Install-Package AutoMapper

    
    
  

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().ReverseMap();
            CreateMap().ReverseMap();
            CreateMap();
        }
    }
}


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(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()

                       //获取IOC对象要求在一个上下文
                       //var appServive = s.GetService();
                       //var log= appServive?.HttpContext?.RequestServices.GetService();
                   };
               });
                return sqlSugar;
            });
            #endregion

            #region automapper
            builder.Services.AddAutoMapper(typeof(AutoMapperConfig));
            #endregion

            #region 自定义服务
            builder.Services.AddTransient();
            #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 CheckLogin(LoginDto loginDto)
        {
            UserInfo userInfo = await _db.Queryable().FirstAsync(p => p.QQ.Equals(loginDto.QQ) && p.Password.Equals(loginDto.Password));
            UserInfoDto userInfoDto=_mapper.Map(userInfo);
            return userInfoDto;
        }
    }
}

在上面的代码中,我们使用Mapper.Map方法将Source对象映射到Destination对象,并将结果传递给视图。

这是一个简单的示例,您可以根据需要进行更多的映射配置和调整。

你可能感兴趣的:(Net6-WebApi,.net)