Browse Source

Extract IAutoObjectMappingProvider

pull/2672/head
Halil İbrahim Kalkan 7 years ago
parent
commit
e2a334f37b
  1. 12
      framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapperAutoObjectMappingProvider.cs
  2. 18
      framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs
  3. 9
      framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/IAutoObjectMappingProvider.cs
  4. 18
      framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/NotImplementedAutoObjectMappingProvider.cs
  5. 4
      framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AbpAutoMapperModule_Basic_Tests.cs

12
framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AutoMapperObjectMapper.cs → 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.DependencyInjection;
using Volo.Abp.ObjectMapping; using Volo.Abp.ObjectMapping;
namespace Volo.Abp.AutoMapper namespace Volo.Abp.AutoMapper
{ {
[Dependency(ServiceLifetime.Transient, ReplaceServices = true)] [Dependency(ServiceLifetime.Transient, ReplaceServices = true)]
public class AutoMapperObjectMapper : DefaultObjectMapper public class AutoMapperAutoObjectMappingProvider : IAutoObjectMappingProvider
{ {
protected IMapperAccessor MapperAccessor { get; } protected IMapperAccessor MapperAccessor { get; }
public AutoMapperObjectMapper(IMapperAccessor mapperAccessor, IServiceProvider serviceProvider) public AutoMapperAutoObjectMappingProvider(IMapperAccessor mapperAccessor)
: base(serviceProvider)
{ {
MapperAccessor = mapperAccessor; MapperAccessor = mapperAccessor;
} }
protected override TDestination AutoMap<TSource, TDestination>(object source) public virtual TDestination Map<TSource, TDestination>(object source)
{ {
return MapperAccessor.Mapper.Map<TDestination>(source); return MapperAccessor.Mapper.Map<TDestination>(source);
} }
protected override TDestination AutoMap<TSource, TDestination>(TSource source, TDestination destination) public virtual TDestination Map<TSource, TDestination>(TSource source, TDestination destination)
{ {
return MapperAccessor.Mapper.Map(source, destination); return MapperAccessor.Mapper.Map(source, destination);
} }

18
framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/DefaultObjectMapper.cs

@ -8,11 +8,15 @@ namespace Volo.Abp.ObjectMapping
public class DefaultObjectMapper : IObjectMapper, ITransientDependency 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, TDestination>(TSource source) public virtual TDestination Map<TSource, TDestination>(TSource source)
@ -22,7 +26,7 @@ namespace Volo.Abp.ObjectMapping
return default; return default;
} }
using (var scope = _serviceProvider.CreateScope()) using (var scope = ServiceProvider.CreateScope())
{ {
var specificMapper = scope.ServiceProvider.GetService<IObjectMapper<TSource, TDestination>>(); var specificMapper = scope.ServiceProvider.GetService<IObjectMapper<TSource, TDestination>>();
if (specificMapper != null) if (specificMapper != null)
@ -61,7 +65,7 @@ namespace Volo.Abp.ObjectMapping
return default; return default;
} }
using (var scope = _serviceProvider.CreateScope()) using (var scope = ServiceProvider.CreateScope())
{ {
var specificMapper = scope.ServiceProvider.GetService<IObjectMapper<TSource, TDestination>>(); var specificMapper = scope.ServiceProvider.GetService<IObjectMapper<TSource, TDestination>>();
if (specificMapper != null) if (specificMapper != null)
@ -87,12 +91,12 @@ namespace Volo.Abp.ObjectMapping
protected virtual TDestination AutoMap<TSource, TDestination>(object source) protected virtual TDestination AutoMap<TSource, TDestination>(object source)
{ {
throw new NotImplementedException($"Can not map from given object ({source}) to {typeof(TDestination).AssemblyQualifiedName}."); return AutoObjectMappingProvider.Map<TSource, TDestination>(source);
} }
protected virtual TDestination AutoMap<TSource, TDestination>(TSource source, TDestination destination) protected virtual TDestination AutoMap<TSource, TDestination>(TSource source, TDestination destination)
{ {
throw new NotImplementedException($"Can no map from {typeof(TSource).AssemblyQualifiedName} to {typeof(TDestination).AssemblyQualifiedName}."); return AutoObjectMappingProvider.Map<TSource, TDestination>(source, destination);
} }
} }
} }

9
framework/src/Volo.Abp.ObjectMapping/Volo/Abp/ObjectMapping/IAutoObjectMappingProvider.cs

@ -0,0 +1,9 @@
namespace Volo.Abp.ObjectMapping
{
public interface IAutoObjectMappingProvider
{
TDestination Map<TSource, TDestination>(object source);
TDestination Map<TSource, TDestination>(TSource source, TDestination destination);
}
}

18
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<TSource, TDestination>(object source)
{
throw new NotImplementedException($"Can not map from given object ({source}) to {typeof(TDestination).AssemblyQualifiedName}.");
}
public TDestination Map<TSource, TDestination>(TSource source, TDestination destination)
{
throw new NotImplementedException($"Can no map from {typeof(TSource).AssemblyQualifiedName} to {typeof(TDestination).AssemblyQualifiedName}.");
}
}
}

4
framework/test/Volo.Abp.AutoMapper.Tests/Volo/Abp/AutoMapper/AbpAutoMapperModule_Basic_Tests.cs

@ -17,9 +17,9 @@ namespace Volo.Abp.AutoMapper
} }
[Fact] [Fact]
public void Should_Replace_ObjectMapper() public void Should_Replace_IAutoObjectMappingProvider()
{ {
Assert.True(_objectMapper is AutoMapperObjectMapper); Assert.True(ServiceProvider.GetRequiredService<IAutoObjectMappingProvider>() is AutoMapperAutoObjectMappingProvider);
} }
[Fact] [Fact]

Loading…
Cancel
Save