Added module object extension configurations.

pull/3831/head
Halil İbrahim Kalkan 6 years ago
parent 9c2297074f
commit 676b677b1f

@ -0,0 +1,59 @@
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using JetBrains.Annotations;
namespace Volo.Abp.ObjectExtending
{
public class ModuleEntityObjectExtensionConfiguration
{
[NotNull]
protected Dictionary<string, ModuleEntityObjectPropertyExtensionConfiguration> Properties { get; }
[NotNull]
public List<Action<ObjectExtensionValidationContext>> Validators { get; }
public ModuleEntityObjectExtensionConfiguration()
{
Properties = new Dictionary<string, ModuleEntityObjectPropertyExtensionConfiguration>();
Validators = new List<Action<ObjectExtensionValidationContext>>();
}
[NotNull]
public virtual ModuleEntityObjectExtensionConfiguration AddOrUpdateProperty<TProperty>(
[NotNull] string propertyName,
[CanBeNull] Action<ModuleEntityObjectPropertyExtensionConfiguration> configureAction = null)
{
return AddOrUpdateProperty(
typeof(TProperty),
propertyName,
configureAction
);
}
[NotNull]
public virtual ModuleEntityObjectExtensionConfiguration AddOrUpdateProperty(
[NotNull] Type propertyType,
[NotNull] string propertyName,
[CanBeNull] Action<ModuleEntityObjectPropertyExtensionConfiguration> configureAction = null)
{
Check.NotNull(propertyType, nameof(propertyType));
Check.NotNull(propertyName, nameof(propertyName));
var propertyInfo = Properties.GetOrAdd(
propertyName,
() => new ModuleEntityObjectPropertyExtensionConfiguration(this, propertyType, propertyName)
);
configureAction?.Invoke(propertyInfo);
return this;
}
[NotNull]
public virtual ImmutableList<ModuleEntityObjectPropertyExtensionConfiguration> GetProperties()
{
return Properties.Values.ToImmutableList();
}
}
}

@ -0,0 +1,56 @@
using System;
using System.Collections.Generic;
using JetBrains.Annotations;
using Volo.Abp.Localization;
namespace Volo.Abp.ObjectExtending
{
public class ModuleEntityObjectPropertyExtensionConfiguration
{
[NotNull]
public ModuleEntityObjectExtensionConfiguration EntityObjectExtensionConfiguration { get; }
[NotNull]
public string Name { get; }
[NotNull]
public Type Type { get; }
[NotNull]
public List<Attribute> Attributes { get; }
[NotNull]
public List<Action<ObjectExtensionPropertyValidationContext>> Validators { get; }
[NotNull]
public ILocalizableString DisplayName
{
get => _displayName;
set
{
Check.NotNull(value, nameof(value));
_displayName = value;
}
}
private ILocalizableString _displayName;
[NotNull]
public Dictionary<object, object> Configuration { get; }
public ModuleEntityObjectPropertyExtensionConfiguration(
[NotNull] ModuleEntityObjectExtensionConfiguration entityObjectExtensionConfiguration,
[NotNull] Type type,
[NotNull] string name)
{
EntityObjectExtensionConfiguration = Check.NotNull(entityObjectExtensionConfiguration, nameof(entityObjectExtensionConfiguration));
Type = Check.NotNull(type, nameof(type));
Name = Check.NotNull(name, nameof(name));
DisplayName = new FixedLocalizableString(Name);
Configuration = new Dictionary<object, object>();
Attributes = new List<Attribute>();
Validators = new List<Action<ObjectExtensionPropertyValidationContext>>();
}
}
}

@ -0,0 +1,9 @@
using System.Collections.Generic;
namespace Volo.Abp.ObjectExtending
{
public class ModuleObjectExtensionConfiguration : Dictionary<string, object>
{
}
}

@ -0,0 +1,9 @@
using System.Collections.Generic;
namespace Volo.Abp.ObjectExtending
{
public class ModuleObjectExtensionConfigurationDictionary : Dictionary<string, object>
{
}
}

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using JetBrains.Annotations;
namespace Volo.Abp.ObjectExtending
{
public static class ModuleObjectExtensionConfigurationDictionaryExtensions
{
public static ModuleObjectExtensionConfigurationDictionary ConfigureModule<T>(
[NotNull] this ModuleObjectExtensionConfigurationDictionary configurationDictionary,
[NotNull] string moduleName,
[NotNull] Action<T> configureAction)
where T : ModuleObjectExtensionConfiguration, new()
{
Check.NotNull(moduleName, nameof(moduleName));
Check.NotNull(configureAction, nameof(configureAction));
configureAction(
(T)configurationDictionary.GetOrAdd(
moduleName,
() => new T()
)
);
return configurationDictionary;
}
}
}

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
namespace Volo.Abp.ObjectExtending
{
public static class ModuleObjectExtensionConfigurationExtensions
{
public static T ConfigureObject<T>(
this T objectConfiguration,
string objectName,
Action<ModuleEntityObjectExtensionConfiguration> configureAction)
where T : ModuleObjectExtensionConfiguration
{
var configuration = objectConfiguration.GetOrAdd(
objectName,
() => new ModuleEntityObjectExtensionConfiguration()
) as ModuleEntityObjectExtensionConfiguration;
configureAction(configuration);
return objectConfiguration;
}
}
}

@ -15,10 +15,13 @@ namespace Volo.Abp.ObjectExtending
protected Dictionary<Type, ObjectExtensionInfo> ObjectsExtensions { get; }
public ModuleObjectExtensionConfigurationDictionary Modules { get; }
protected internal ObjectExtensionManager()
{
ObjectsExtensions = new Dictionary<Type, ObjectExtensionInfo>();
Configuration = new Dictionary<object, object>();
Modules = new ModuleObjectExtensionConfigurationDictionary();
}
[NotNull]

@ -0,0 +1,7 @@
namespace Volo.Abp.ObjectExtending
{
public class IdentityModuleObjectExtensionConfiguration : ModuleObjectExtensionConfiguration
{
}
}

@ -0,0 +1,17 @@
using System;
namespace Volo.Abp.ObjectExtending
{
public static class IdentityModuleObjectExtensionConfigurationExtensions
{
public static IdentityModuleObjectExtensionConfiguration ConfigureUser(
this IdentityModuleObjectExtensionConfiguration configurations,
Action<ModuleEntityObjectExtensionConfiguration> configureAction)
{
return configurations.ConfigureEntity(
"User",
configureAction
);
}
}
}

@ -0,0 +1,17 @@
using System;
namespace Volo.Abp.ObjectExtending
{
public static class IdentityModuleObjectExtensionConfigurationsExtensions
{
public static ModuleObjectExtensionConfigurationDictionary ConfigureIdentity(
this ModuleObjectExtensionConfigurationDictionary modules,
Action<IdentityModuleObjectExtensionConfiguration> configureAction)
{
return modules.ConfigureModule(
"Identity",
configureAction
);
}
}
}
Loading…
Cancel
Save