You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Mapster中实现类似AutoMapper的自定义值解析器?

在Mapster中实现类似AutoMapper CustomValueResolver的功能

要在Mapster中实现和AutoMapper自定义值解析器一致的功能,你可以通过以下步骤完成:

1. 创建自定义值解析器类

实现Mapster的IValueResolver<TSource, TDestination, TDestinationMember>接口,同时支持依赖注入(比如注入DbContext):

using Mapster;
using YourProjectNamespace.Context.Models;
using Microsoft.EntityFrameworkCore;

public class EmployeeGatesResolver : IValueResolver<Employee, EmployeeDTO, List<GateType>>
{
    private readonly YourDbContext _dbContext;

    // 通过构造函数注入DbContext
    public EmployeeGatesResolver(YourDbContext dbContext)
    {
        _dbContext = dbContext;
    }

    public List<GateType> Resolve(Employee source, EmployeeDTO destination, List<GateType> destMember, ResolutionContext context)
    {
        // 这里编写你的业务逻辑,从数据库读取数据并返回
        return _dbContext.Gates
            .Where(gate => gate.EmployeeId == source.Id)
            .ToList();
    }
}

2. 配置Mapster映射规则

在TypeAdapterConfig中指定使用自定义解析器来映射目标属性:

TypeAdapterConfig<Employee, EmployeeDTO>.NewConfig()
    // 直接指定解析器类型来映射Gates属性
    .Map(dest => dest.Gates, typeof(EmployeeGatesResolver));

3. 注册解析器到依赖注入容器

确保你的自定义解析器被注册到DI容器中,这样Mapster可以获取到带依赖的实例:

// 在Program.cs或Startup.cs中
builder.Services.AddScoped<EmployeeGatesResolver>();

额外说明

  • 如果你的项目使用了Mapster.DependencyInjection包,可以通过扫描程序集自动注册解析器:
    builder.Services.AddMapster();
    builder.Services.AddMapsterScanning(typeof(EmployeeGatesResolver).Assembly);
    
  • 解析器中的ResolutionContext可以获取当前映射的上下文信息,也可以通过context.GetService<T>获取其他依赖服务。

内容的提问来源于stack exchange,提问作者Ali.Rashidi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 23:05:19