From 86d845c51f5218e2e81549a38aa2927fe9712d58 Mon Sep 17 00:00:00 2001 From: Chaowlert Date: Sun, 2 Aug 2020 15:27:40 +0700 Subject: [PATCH] fix include code gen --- src/Mapster.Tests/Mapster.Tests.csproj | 4 ++++ src/Mapster/Adapters/BaseAdapter.cs | 6 +++++- src/Mapster/TypeAdapterSetter.cs | 20 ++++++++++++++++++-- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/Mapster.Tests/Mapster.Tests.csproj b/src/Mapster.Tests/Mapster.Tests.csproj index 600eee16..f4425cfb 100644 --- a/src/Mapster.Tests/Mapster.Tests.csproj +++ b/src/Mapster.Tests/Mapster.Tests.csproj @@ -20,6 +20,10 @@ + + + + diff --git a/src/Mapster/Adapters/BaseAdapter.cs b/src/Mapster/Adapters/BaseAdapter.cs index 1a8f466e..75ba2053 100644 --- a/src/Mapster/Adapters/BaseAdapter.cs +++ b/src/Mapster/Adapters/BaseAdapter.cs @@ -188,7 +188,11 @@ protected Expression CreateBlockExpressionBody(Expression source, Expression? de set = Expression.Coalesce(destination, set); } - if (set.NodeType != ExpressionType.Throw) + if (set.NodeType == ExpressionType.Throw) + { + blocks.Add(set); + } + else { //TDestination result; //if (source == null) diff --git a/src/Mapster/TypeAdapterSetter.cs b/src/Mapster/TypeAdapterSetter.cs index d9bf75cd..278284d5 100644 --- a/src/Mapster/TypeAdapterSetter.cs +++ b/src/Mapster/TypeAdapterSetter.cs @@ -366,6 +366,17 @@ public TypeAdapterSetter MapToConstructor(ConstructorInfo ctor) this.Settings.MapToConstructor = ctor; return this; } + + public TypeAdapterSetter AfterMappingInline(Expression> action) + { + this.CheckCompiled(); + + var lambda = Expression.Lambda(action.Body, + Expression.Parameter(typeof(object), "src"), + action.Parameters[0]); + Settings.AfterMappingFactories.Add(arg => lambda); + return this; + } } [System.Diagnostics.CodeAnalysis.SuppressMessage("Minor Code Smell", "S4136:Method overloads should be grouped together", Justification = "")] @@ -416,6 +427,11 @@ internal TypeAdapterSetter(TypeAdapterSettings settings, TypeAdapterConfig paren return (TypeAdapterSetter) base.MapToConstructor(ctor); } + public new TypeAdapterSetter AfterMappingInline(Expression> action) + { + return (TypeAdapterSetter) base.AfterMappingInline(action); + } + #endregion public TypeAdapterSetter IgnoreIf( @@ -570,7 +586,7 @@ public TypeAdapterSetter BeforeMappingInline(Expression action); return this; } - + public TypeAdapterSetter AfterMappingInline(Expression> action) { this.CheckCompiled(); @@ -578,7 +594,7 @@ public TypeAdapterSetter AfterMappingInline(Expression action); return this; } - + public TypeAdapterSetter Include() where TDerivedSource: class, TSource where TDerivedDestination: class, TDestination