diff --git a/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/AbpMapperlyMapperBase.cs b/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/AbpMapperlyMapperBase.cs index 008c3635ea..6b7e9928ba 100644 --- a/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/AbpMapperlyMapperBase.cs +++ b/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/AbpMapperlyMapperBase.cs @@ -16,7 +16,7 @@ public abstract class AbpMapperlyMapperBase : IAbpMapperl } } -public abstract class AbpReverseMapperlyMapperBase : AbpMapperlyMapperBase, IAbpReverseMapperlyMapper +public abstract class AbpReverseMapperlyMapperBase : AbpMapperlyMapperBase, IAbpReverseMapperlyMapper { public abstract TSource ReverseMap(TDestination destination); diff --git a/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/IAbpMapperlyMapper.cs b/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/IAbpMapperlyMapper.cs index 3d391cfe1f..eac0f6644c 100644 --- a/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/IAbpMapperlyMapper.cs +++ b/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/IAbpMapperlyMapper.cs @@ -11,7 +11,7 @@ public interface IAbpMapperlyMapper void AfterMap(TSource source, TDestination destination); } -public interface IAbpReverseMapperlyMapper : IAbpMapperlyMapper +public interface IAbpReverseMapperlyMapper : IAbpMapperlyMapper { TSource ReverseMap(TDestination destination); diff --git a/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/MapperlyAutoObjectMappingProvider.cs b/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/MapperlyAutoObjectMappingProvider.cs index 19f677515b..34fa1b2c53 100644 --- a/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/MapperlyAutoObjectMappingProvider.cs +++ b/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/MapperlyAutoObjectMappingProvider.cs @@ -33,17 +33,17 @@ public class MapperlyAutoObjectMappingProvider : IAutoObjectMappingProvider { mapper.BeforeMap((TSource)source); var destination = mapper.Map((TSource)source); - TryMapExtraProperties(mapper, (TSource)source, destination, new ExtraPropertyDictionary()); + TryMapExtraProperties(mapper.GetType().GetSingleAttributeOrNull(), (TSource)source, destination, new ExtraPropertyDictionary()); mapper.AfterMap((TSource)source, destination); return destination; } - var reverseMapper = ServiceProvider.GetService>(); + var reverseMapper = ServiceProvider.GetService>(); if (reverseMapper != null) { reverseMapper.BeforeReverseMap((TSource)source); var destination = reverseMapper.ReverseMap((TSource)source); - TryMapExtraProperties(reverseMapper.As>(), destination, (TSource)source, GetExtraProperties(destination)); + TryMapExtraProperties(reverseMapper.GetType().GetSingleAttributeOrNull(), destination, (TSource)source, GetExtraProperties(destination)); reverseMapper.AfterReverseMap((TSource)source, destination); return destination; } @@ -60,18 +60,18 @@ public class MapperlyAutoObjectMappingProvider : IAutoObjectMappingProvider mapper.BeforeMap(source); var destinationExtraProperties = GetExtraProperties(destination); mapper.Map(source, destination); - TryMapExtraProperties(mapper, source, destination, destinationExtraProperties); + TryMapExtraProperties(mapper.GetType().GetSingleAttributeOrNull(), source, destination, destinationExtraProperties); mapper.AfterMap(source, destination); return destination; } - var reverseMapper = ServiceProvider.GetService>(); + var reverseMapper = ServiceProvider.GetService>(); if (reverseMapper != null) { reverseMapper.BeforeReverseMap(source); var destinationExtraProperties = GetExtraProperties(destination); reverseMapper.ReverseMap(source, destination); - TryMapExtraProperties(reverseMapper.As>(), source, destination, destinationExtraProperties); + TryMapExtraProperties(reverseMapper.GetType().GetSingleAttributeOrNull(), source, destination, destinationExtraProperties); reverseMapper.AfterReverseMap(source, destination); return destination; } @@ -95,10 +95,9 @@ public class MapperlyAutoObjectMappingProvider : IAutoObjectMappingProvider return extraProperties; } - protected virtual void TryMapExtraProperties(IAbpMapperlyMapper mapper, TSource source, TDestination destination, ExtraPropertyDictionary destinationExtraProperty) + protected virtual void TryMapExtraProperties(MapExtraPropertiesAttribute? mapExtraPropertiesAttribute, TSource source, TDestination destination, ExtraPropertyDictionary destinationExtraProperty) { - var mapToRegularPropertiesAttribute = mapper.GetType().GetSingleAttributeOrNull(); - if (mapToRegularPropertiesAttribute != null && + if (mapExtraPropertiesAttribute != null && typeof(IHasExtraProperties).IsAssignableFrom(typeof(TDestination)) && typeof(IHasExtraProperties).IsAssignableFrom(typeof(TSource))) { @@ -106,13 +105,12 @@ public class MapperlyAutoObjectMappingProvider : IAutoObjectMappingProvider source!.As(), destination!.As(), destinationExtraProperty, - mapToRegularPropertiesAttribute.DefinitionChecks, - mapToRegularPropertiesAttribute.IgnoredProperties, - mapToRegularPropertiesAttribute.MapToRegularProperties + mapExtraPropertiesAttribute.DefinitionChecks, + mapExtraPropertiesAttribute.IgnoredProperties, + mapExtraPropertiesAttribute.MapToRegularProperties ); } } - protected virtual void MapExtraProperties( IHasExtraProperties source, IHasExtraProperties destination, diff --git a/framework/test/Volo.Abp.Mapperly.Tests/Volo/Abp/Mapperly/AbpReverseMapperly_Tests.cs b/framework/test/Volo.Abp.Mapperly.Tests/Volo/Abp/Mapperly/AbpReverseMapperly_Tests.cs index cb0b493f5a..0e5dbc8c11 100644 --- a/framework/test/Volo.Abp.Mapperly.Tests/Volo/Abp/Mapperly/AbpReverseMapperly_Tests.cs +++ b/framework/test/Volo.Abp.Mapperly.Tests/Volo/Abp/Mapperly/AbpReverseMapperly_Tests.cs @@ -22,7 +22,7 @@ public class MyReverseClassDto } [Mapper] -public partial class MyReverseClassMapper : AbpReverseMapperlyMapperBase +public partial class MyReverseClassMapper : AbpReverseMapperlyMapperBase { public override partial MyReverseClassDto Map(MyReverseClass source); @@ -68,5 +68,13 @@ public class AbpReverseMapperly_Tests : AbpIntegratedTest var myClass = _objectMapper.Map(myClassDto); myClass.Name.ShouldBe("BeforeReverseMap Test AfterReverseMap"); + + myClassDto.Id = "2"; + myClassDto.Name = "Test2"; + + _objectMapper.Map(myClassDto, myClass); + + myClass.Id.ShouldBe("2"); + myClass.Name.ShouldBe("BeforeReverseMap Test2 AfterReverseMap"); } }