Skip to content

Fast.Mapster

逐成员 API、参数与返回参考

版本 3.5.27;目标 net8.0net9.0net10.0;依赖 Fast.RuntimeMapsterMapster.DependencyInjection。源仓库中央依赖版本为 Mapster 10.0.12

bash
dotnet add package Fast.Mapster

公开入口与注册行为

Fast.Mapster.IServiceCollectionExtension.AddMapster(this IServiceCollection services) 是本包公开注册入口,返回原服务集合,没有额外回调参数。

注册时使用 TypeAdapterConfig.GlobalSettings,扫描 MAppContext.Assemblies 中的 IRegister 实现,设置名称匹配和引用保留,然后注册配置单例及 Scoped 的 MapsterMapper.IMapperServiceMapper)。

以下为消费端 Program.cs,使用 Microsoft.NET.Sdk.Web,目标选择本页列出的 .NET 8、9 或 10,并安装上方指定包。app.Run() 表示正常宿主启动;本次文档维护不会执行它。

csharp
using Fast.Mapster;
using Mapster;
using MapsterMapper;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Builder;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMapster();

var app = builder.Build();
app.MapPost("/map", (SourceModel source, IMapper mapper) => mapper.Map<TargetModel>(source));
app.Run();

public sealed class SourceModel
{
    public string Title { get; set; } = "";
}

public sealed class TargetModel
{
    public string Title { get; set; } = "";
}

public sealed class MappingProfile : IRegister
{
    public void Register(TypeAdapterConfig config)
        => config.NewConfig<SourceModel, TargetModel>();
}

public sealed class MappingService(IMapper mapper)
{
    public TargetModel Convert(SourceModel source) => mapper.Map<TargetModel>(source);
}

默认值与边界

  • 当前实现先设置 NameMatchingStrategy.Flexible,再设置 IgnoreCase;最终默认策略以最后一次设置为准,不能将两次调用描述为两个并行模式。
  • PreserveReference(true) 用于映射图的引用保留,不代表任意对象都能无损深拷贝。
  • 使用全局配置意味着同进程内的其他 Mapster 消费方可能共享这些设置;注册后更改全局配置需考虑并发及已有编译映射。
  • IRegister 的扫描范围取自框架程序集集合。配置类未被发现时,不应只因它存在于源码就认定已生效。
  • Adapt、投影与其他映射 API 属于 Mapster 本身,本包没有重定义其全部合同。ORM 查询投影能否翻译需由对应查询提供器验证。
  • Scoped IMapper 可使用请求作用域服务,不能直接注入单例并长期持有。

来源与验证

依据 完整注册实现。本轮为源码静态核对,未编译片段或执行对象映射。