Browse Source

Fix generic type parameters in reverse mapper interfaces and classes for consistency

pull/23277/head
maliming 1 year ago
parent
commit
53710b76b6
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 2
      framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/AbpMapperlyMapperBase.cs
  2. 2
      framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/IAbpMapperlyMapper.cs
  3. 24
      framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/MapperlyAutoObjectMappingProvider.cs
  4. 10
      framework/test/Volo.Abp.Mapperly.Tests/Volo/Abp/Mapperly/AbpReverseMapperly_Tests.cs

2
framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/AbpMapperlyMapperBase.cs

@ -16,7 +16,7 @@ public abstract class AbpMapperlyMapperBase<TSource, TDestination> : IAbpMapperl
}
}
public abstract class AbpReverseMapperlyMapperBase<TDestination, TSource> : AbpMapperlyMapperBase<TSource, TDestination>, IAbpReverseMapperlyMapper<TDestination, TSource>
public abstract class AbpReverseMapperlyMapperBase<TSource, TDestination> : AbpMapperlyMapperBase<TSource, TDestination>, IAbpReverseMapperlyMapper<TSource, TDestination>
{
public abstract TSource ReverseMap(TDestination destination);

2
framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/IAbpMapperlyMapper.cs

@ -11,7 +11,7 @@ public interface IAbpMapperlyMapper<in TSource, TDestination>
void AfterMap(TSource source, TDestination destination);
}
public interface IAbpReverseMapperlyMapper<TDestination, TSource> : IAbpMapperlyMapper<TSource, TDestination>
public interface IAbpReverseMapperlyMapper<TSource, TDestination> : IAbpMapperlyMapper<TSource, TDestination>
{
TSource ReverseMap(TDestination destination);

24
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<MapExtraPropertiesAttribute>(), (TSource)source, destination, new ExtraPropertyDictionary());
mapper.AfterMap((TSource)source, destination);
return destination;
}
var reverseMapper = ServiceProvider.GetService<IAbpReverseMapperlyMapper<TSource, TDestination>>();
var reverseMapper = ServiceProvider.GetService<IAbpReverseMapperlyMapper<TDestination, TSource>>();
if (reverseMapper != null)
{
reverseMapper.BeforeReverseMap((TSource)source);
var destination = reverseMapper.ReverseMap((TSource)source);
TryMapExtraProperties(reverseMapper.As<IAbpMapperlyMapper<TDestination, TSource>>(), destination, (TSource)source, GetExtraProperties(destination));
TryMapExtraProperties(reverseMapper.GetType().GetSingleAttributeOrNull<MapExtraPropertiesAttribute>(), 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<MapExtraPropertiesAttribute>(), source, destination, destinationExtraProperties);
mapper.AfterMap(source, destination);
return destination;
}
var reverseMapper = ServiceProvider.GetService<IAbpReverseMapperlyMapper<TSource, TDestination>>();
var reverseMapper = ServiceProvider.GetService<IAbpReverseMapperlyMapper<TDestination, TSource>>();
if (reverseMapper != null)
{
reverseMapper.BeforeReverseMap(source);
var destinationExtraProperties = GetExtraProperties(destination);
reverseMapper.ReverseMap(source, destination);
TryMapExtraProperties(reverseMapper.As<IAbpReverseMapperlyMapper<TDestination, TSource>>(), source, destination, destinationExtraProperties);
TryMapExtraProperties(reverseMapper.GetType().GetSingleAttributeOrNull<MapExtraPropertiesAttribute>(), source, destination, destinationExtraProperties);
reverseMapper.AfterReverseMap(source, destination);
return destination;
}
@ -95,10 +95,9 @@ public class MapperlyAutoObjectMappingProvider : IAutoObjectMappingProvider
return extraProperties;
}
protected virtual void TryMapExtraProperties<TSource, TDestination>(IAbpMapperlyMapper<TSource, TDestination> mapper, TSource source, TDestination destination, ExtraPropertyDictionary destinationExtraProperty)
protected virtual void TryMapExtraProperties<TSource, TDestination>(MapExtraPropertiesAttribute? mapExtraPropertiesAttribute, TSource source, TDestination destination, ExtraPropertyDictionary destinationExtraProperty)
{
var mapToRegularPropertiesAttribute = mapper.GetType().GetSingleAttributeOrNull<MapExtraPropertiesAttribute>();
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<IHasExtraProperties>(),
destination!.As<IHasExtraProperties>(),
destinationExtraProperty,
mapToRegularPropertiesAttribute.DefinitionChecks,
mapToRegularPropertiesAttribute.IgnoredProperties,
mapToRegularPropertiesAttribute.MapToRegularProperties
mapExtraPropertiesAttribute.DefinitionChecks,
mapExtraPropertiesAttribute.IgnoredProperties,
mapExtraPropertiesAttribute.MapToRegularProperties
);
}
}
protected virtual void MapExtraProperties<TSource, TDestination>(
IHasExtraProperties source,
IHasExtraProperties destination,

10
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<MyReverseClassDto, MyReverseClass>
public partial class MyReverseClassMapper : AbpReverseMapperlyMapperBase<MyReverseClass, MyReverseClassDto>
{
public override partial MyReverseClassDto Map(MyReverseClass source);
@ -68,5 +68,13 @@ public class AbpReverseMapperly_Tests : AbpIntegratedTest<MapperlyTestModule>
var myClass = _objectMapper.Map<MyReverseClassDto, MyReverseClass>(myClassDto);
myClass.Name.ShouldBe("BeforeReverseMap Test AfterReverseMap");
myClassDto.Id = "2";
myClassDto.Name = "Test2";
_objectMapper.Map<MyReverseClassDto, MyReverseClass>(myClassDto, myClass);
myClass.Id.ShouldBe("2");
myClass.Name.ShouldBe("BeforeReverseMap Test2 AfterReverseMap");
}
}

Loading…
Cancel
Save