Skip to content

Mapster

约 199 字小于 1 分钟

NET

2023-11-02

引入

public static IServiceCollection AddMapster(this IServiceCollection services)
{
    var typeAdapterConfig = TypeAdapterConfig.GlobalSettings;
    typeAdapterConfig.Scan(Assembly.GetExecutingAssembly());

            typeAdapterConfig.Default.NameMatchingStrategy(NameMatchingStrategy.Flexible).PreserveReference(true);
            typeAdapterConfig.Default.NameMatchingStrategy(NameMatchingStrategy.IgnoreCase).PreserveReference(true);
    services.AddSingleton(typeAdapterConfig);
    services.AddScoped<IMapper, ServiceMapper>();
    return services;
}

使用

//1.随业务写
// NewConfig() 新配置;   ForType()继承之前的配置
TypeAdapterConfig<LogInput, SysLog>.NewConfig()
	.Ignore(dest=>dest.Message)
    .Map(dest => dest.Message, src => src.LogLevel + " => " + src.LogName); //定义新的映射关系
    //.Map(dest => dest.aa, src => src.bb + src.ccc);
var c = logInput.Adapt<SysLog>();


//2.实现IRegister即可。需要注入IRegister的程序集
public class LogInputMapper : IRegister
    {
        public void Register(TypeAdapterConfig config)
        {
            config.ForType<LogInput, SysLog>()
                     .Map(dest => dest.Message, src => src.LogLevel + " =>!>> " + src.LogName);
        }
    }

有参构造函数 ConstructUsing

 var config = new TypeAdapterConfig();
 config.NewConfig<Condition, Condition>()
     .ConstructUsing((source) => new Condition(ValueTypeOptions, RelateTypeOptions, ConditionTypeOptions, DetectionProOptions));
 var newCondition = condition.Adapt<Condition>(config);


public class Condition
{
     public Condition(Dictionary<string, int> ValueTypeOptions, Dictionary<string, int> RelateTypeOptions, Dictionary<string, int> ConditionTypeOptions, Dictionary<string, object> DetectionProOptions)
     {
         this.ValueTypeOptions = ValueTypeOptions;
         this.RelateTypeOptions = RelateTypeOptions;
         this.ConditionTypeOptions = ConditionTypeOptions;
         this.DetectionProOptions = DetectionProOptions;
     }
     public int Id { get; set; }
     public int SampleType { get; set; }
     . . .
}