外观
Mapster
引入
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; }
. . .
}