diff --git a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapperObjectMapper.cs b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapperAutoObjectMappingProvider.cs similarity index 50% rename from framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapperObjectMapper.cs rename to framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapperAutoObjectMappingProvider.cs index 73fad64113..7dc33fb011 100644 --- a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapperObjectMapper.cs +++ b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapperAutoObjectMappingProvider.cs @@ -1,27 +1,25 @@ -using System; -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; using Volo.Abp.DependencyInjection; using Volo.Abp.ObjectMapping; namespace Volo.Abp.AutoMapper { [Dependency(ServiceLifetime.Transient, ReplaceServices = true)] - public class AutoMapperObjectMapper : DefaultObjectMapper + public class AutoMapperAutoObjectMappingProvider : IAutoObjectMappingProvider { protected IMapperAccessor MapperAccessor { get; } - public AutoMapperObjectMapper(IMapperAccessor mapperAccessor, IServiceProvider serviceProvider) - : base(serviceProvider) + public AutoMapperAutoObjectMappingProvider(IMapperAccessor mapperAccessor) { MapperAccessor = mapperAccessor; } - protected override TDestination AutoMap(object source) + public virtual TDestination Map(object source) { return MapperAccessor.Mapper.Map(source); } - protected override TDestination AutoMap(TSource source, TDestination destination) + public virtual TDestination Map(TSource source, TDestination destination) { return MapperAccessor.Mapper.Map(source, destination); } diff --git a/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs b/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs index b746ab3973..d4295e20d7 100644 --- a/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs +++ b/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs @@ -8,11 +8,15 @@ namespace Volo.Abp.ObjectMapping public class DefaultObjectMapper : IObjectMapper, ITransientDependency { - private readonly IServiceProvider _serviceProvider; + protected IAutoObjectMappingProvider AutoObjectMappingProvider { get; } + protected IServiceProvider ServiceProvider { get; } - public DefaultObjectMapper(IServiceProvider serviceProvider) + public DefaultObjectMapper( + IServiceProvider serviceProvider, + IAutoObjectMappingProvider autoObjectMappingProvider) { - _serviceProvider = serviceProvider; + AutoObjectMappingProvider = autoObjectMappingProvider; + ServiceProvider = serviceProvider; } public virtual TDestination Map(TSource source) @@ -22,7 +26,7 @@ namespace Volo.Abp.ObjectMapping return default; } - using (var scope = _serviceProvider.CreateScope()) + using (var scope = ServiceProvider.CreateScope()) { var specificMapper = scope.ServiceProvider.GetService>(); if (specificMapper != null) @@ -61,7 +65,7 @@ namespace Volo.Abp.ObjectMapping return default; } - using (var scope = _serviceProvider.CreateScope()) + using (var scope = ServiceProvider.CreateScope()) { var specificMapper = scope.ServiceProvider.GetService>(); if (specificMapper != null) @@ -87,12 +91,12 @@ namespace Volo.Abp.ObjectMapping protected virtual TDestination AutoMap(object source) { - throw new NotImplementedException($"Can not map from given object ({source}) to {typeof(TDestination).AssemblyQualifiedName}."); + return AutoObjectMappingProvider.Map(source); } protected virtual TDestination AutoMap(TSource source, TDestination destination) { - throw new NotImplementedException($"Can no map from {typeof(TSource).AssemblyQualifiedName} to {typeof(TDestination).AssemblyQualifiedName}."); + return AutoObjectMappingProvider.Map(source, destination); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/IAutoObjectMappingProvider.cs b/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/IAutoObjectMappingProvider.cs new file mode 100644 index 0000000000..37ac1d0b7b --- /dev/null +++ b/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/IAutoObjectMappingProvider.cs @@ -0,0 +1,9 @@ +namespace Volo.Abp.ObjectMapping +{ + public interface IAutoObjectMappingProvider + { + TDestination Map(object source); + + TDestination Map(TSource source, TDestination destination); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/NotImplementedAutoObjectMappingProvider.cs b/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/NotImplementedAutoObjectMappingProvider.cs new file mode 100644 index 0000000000..56592f77f3 --- /dev/null +++ b/framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/NotImplementedAutoObjectMappingProvider.cs @@ -0,0 +1,18 @@ +using System; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.ObjectMapping +{ + public sealed class NotImplementedAutoObjectMappingProvider : IAutoObjectMappingProvider, ISingletonDependency + { + public TDestination Map(object source) + { + throw new NotImplementedException($"Can not map from given object ({source}) to {typeof(TDestination).AssemblyQualifiedName}."); + } + + public TDestination Map(TSource source, TDestination destination) + { + throw new NotImplementedException($"Can no map from {typeof(TSource).AssemblyQualifiedName} to {typeof(TDestination).AssemblyQualifiedName}."); + } + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AbpAutoMapperModule_Basic_Tests.cs b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AbpAutoMapperModule_Basic_Tests.cs index a75db5189b..a5051447b4 100644 --- a/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AbpAutoMapperModule_Basic_Tests.cs +++ b/framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AbpAutoMapperModule_Basic_Tests.cs @@ -17,9 +17,9 @@ namespace Volo.Abp.AutoMapper } [Fact] - public void Should_Replace_ObjectMapper() + public void Should_Replace_IAutoObjectMappingProvider() { - Assert.True(_objectMapper is AutoMapperObjectMapper); + Assert.True(ServiceProvider.GetRequiredService() is AutoMapperAutoObjectMappingProvider); } [Fact]