Browse Source

Refactor ObjectExtensionManager

pull/3401/head
Halil İbrahim Kalkan 7 years ago
parent
commit
bf93973730
  1. 2
      framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleDtoExtensions.cs
  2. 2
      framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/HasExtraPropertiesObjectExtendingExtensions.cs
  3. 28
      framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionInfo.cs
  4. 31
      framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionManager.cs

2
framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleDtoExtensions.cs

@ -11,7 +11,7 @@ namespace AutoMapper
where TDestination : IHasExtraProperties where TDestination : IHasExtraProperties
where TSource : IHasExtraProperties where TSource : IHasExtraProperties
{ {
var properties = ObjectExtensionManager.Instance.GetProperties<TDestination>(); var properties = ObjectExtensionManager.Instance.For<TDestination>().GetProperties();
return mappingExpression return mappingExpression
.ForMember( .ForMember(
x => x.ExtraProperties, x => x.ExtraProperties,

2
framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/HasExtraPropertiesObjectExtendingExtensions.cs

@ -8,7 +8,7 @@ namespace Volo.Abp.ObjectExtending
where TSource : IHasExtraProperties where TSource : IHasExtraProperties
where TDestination : IHasExtraProperties where TDestination : IHasExtraProperties
{ {
var extensionPropertyInfos = ObjectExtensionManager.Instance.GetProperties<TSource>(); var extensionPropertyInfos = ObjectExtensionManager.Instance.For<TSource>().GetProperties();
foreach (var extensionPropertyInfo in extensionPropertyInfos) foreach (var extensionPropertyInfo in extensionPropertyInfos)
{ {

28
framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionInfo.cs

@ -1,17 +1,41 @@
using System.Collections.Generic; using System;
using System.Collections.Generic;
using System.Collections.Immutable;
namespace Volo.Abp.ObjectExtending namespace Volo.Abp.ObjectExtending
{ {
public class ObjectExtensionInfo public class ObjectExtensionInfo
{ {
public Type Type { get; }
public Dictionary<string, ObjectExtensionPropertyInfo> Properties { get; } public Dictionary<string, ObjectExtensionPropertyInfo> Properties { get; }
public Dictionary<object, object> Configuration { get; } public Dictionary<object, object> Configuration { get; }
public ObjectExtensionInfo() public ObjectExtensionInfo(Type type)
{ {
Type = type;
Properties = new Dictionary<string, ObjectExtensionPropertyInfo>(); Properties = new Dictionary<string, ObjectExtensionPropertyInfo>();
Configuration = new Dictionary<object, object>(); Configuration = new Dictionary<object, object>();
} }
public ObjectExtensionPropertyInfo AddProperty(
string propertyName,
Action<ObjectExtensionPropertyInfo> configureAction = null)
{
var propertyInfo = Properties.GetOrAdd(
propertyName,
() => new ObjectExtensionPropertyInfo(propertyName)
);
configureAction?.Invoke(propertyInfo);
return propertyInfo;
}
public ImmutableList<ObjectExtensionPropertyInfo> GetProperties()
{
return Properties.Values.ToImmutableList();
}
} }
} }

31
framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionManager.cs

@ -1,7 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.Immutable;
using Volo.Abp.Data;
namespace Volo.Abp.ObjectExtending namespace Volo.Abp.ObjectExtending
{ {
@ -9,33 +7,24 @@ namespace Volo.Abp.ObjectExtending
{ {
public static ObjectExtensionManager Instance { get; } = new ObjectExtensionManager(); public static ObjectExtensionManager Instance { get; } = new ObjectExtensionManager();
private Dictionary<Type, ObjectExtensionInfo> Extensions { get; } private Dictionary<Type, ObjectExtensionInfo> ObjectsExtensions { get; }
private ObjectExtensionManager() private ObjectExtensionManager()
{ {
Extensions = new Dictionary<Type, ObjectExtensionInfo>(); ObjectsExtensions = new Dictionary<Type, ObjectExtensionInfo>();
} }
public ObjectExtensionPropertyInfo AddProperty<TDto>( public ObjectExtensionInfo For<TObject>(
string propertyName, Action<ObjectExtensionInfo> configureAction = null)
Action<ObjectExtensionPropertyInfo> configureAction = null)
{ {
var extensionInfo = Extensions.GetOrAdd(typeof(TDto), () => new ObjectExtensionInfo()); var extensionInfo = ObjectsExtensions.GetOrAdd(
var propertyInfo = extensionInfo.Properties.GetOrAdd(propertyName, () => new ObjectExtensionPropertyInfo(propertyName)); typeof(TObject),
configureAction?.Invoke(propertyInfo); () => new ObjectExtensionInfo(typeof(TObject))
return propertyInfo; );
}
public ImmutableList<ObjectExtensionPropertyInfo> GetProperties<TDto>() configureAction?.Invoke(extensionInfo);
where TDto : IHasExtraProperties
{
var extensionInfo = Extensions.GetOrDefault(typeof(TDto));
if (extensionInfo == null)
{
return new ObjectExtensionPropertyInfo[0].ToImmutableList(); //TODO: Return an empty one!
}
return extensionInfo.Properties.Values.ToImmutableList(); return extensionInfo;
} }
} }
} }
Loading…
Cancel
Save