Fast.Mapster
版本 3.5.27;目标 net8.0、net9.0、net10.0;依赖 Fast.Runtime、Mapster 与 Mapster.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.IMapper(ServiceMapper)。
以下为消费端 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 可使用请求作用域服务,不能直接注入单例并长期持有。
来源与验证
依据 完整注册实现。本轮为源码静态核对,未编译片段或执行对象映射。
