Browse Source

Refactor ObjectExtensionManager

pull/3401/head
Halil İbrahim Kalkan 6 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 TSource : IHasExtraProperties
{
var properties = ObjectExtensionManager.Instance.GetProperties<TDestination>();
var properties = ObjectExtensionManager.Instance.For<TDestination>().GetProperties();
return mappingExpression
.ForMember(
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 TDestination : IHasExtraProperties
{
var extensionPropertyInfos = ObjectExtensionManager.Instance.GetProperties<TSource>();
var extensionPropertyInfos = ObjectExtensionManager.Instance.For<TSource>().GetProperties();
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
{
public class ObjectExtensionInfo
{
public Type Type { get; }
public Dictionary<string, ObjectExtensionPropertyInfo> Properties { get; }
public Dictionary<object, object> Configuration { get; }
public ObjectExtensionInfo()
public ObjectExtensionInfo(Type type)
{
Type = type;
Properties = new Dictionary<string, ObjectExtensionPropertyInfo>();
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.Collections.Generic;
using System.Collections.Immutable;
using Volo.Abp.Data;
namespace Volo.Abp.ObjectExtending
{
@ -9,33 +7,24 @@ namespace Volo.Abp.ObjectExtending
{
public static ObjectExtensionManager Instance { get; } = new ObjectExtensionManager();
private Dictionary<Type, ObjectExtensionInfo> Extensions { get; }
private Dictionary<Type, ObjectExtensionInfo> ObjectsExtensions { get; }
private ObjectExtensionManager()
{
Extensions = new Dictionary<Type, ObjectExtensionInfo>();
ObjectsExtensions = new Dictionary<Type, ObjectExtensionInfo>();
}
public ObjectExtensionPropertyInfo AddProperty<TDto>(
string propertyName,
Action<ObjectExtensionPropertyInfo> configureAction = null)
public ObjectExtensionInfo For<TObject>(
Action<ObjectExtensionInfo> configureAction = null)
{
var extensionInfo = Extensions.GetOrAdd(typeof(TDto), () => new ObjectExtensionInfo());
var propertyInfo = extensionInfo.Properties.GetOrAdd(propertyName, () => new ObjectExtensionPropertyInfo(propertyName));
configureAction?.Invoke(propertyInfo);
return propertyInfo;
}
var extensionInfo = ObjectsExtensions.GetOrAdd(
typeof(TObject),
() => new ObjectExtensionInfo(typeof(TObject))
);
public ImmutableList<ObjectExtensionPropertyInfo> GetProperties<TDto>()
where TDto : IHasExtraProperties
{
var extensionInfo = Extensions.GetOrDefault(typeof(TDto));
if (extensionInfo == null)
{
return new ObjectExtensionPropertyInfo[0].ToImmutableList(); //TODO: Return an empty one!
}
configureAction?.Invoke(extensionInfo);
return extensionInfo.Properties.Values.ToImmutableList();
return extensionInfo;
}
}
}
Loading…
Cancel
Save