Add InheritResource attribute for base localization resources. #171.

pull/179/head
Halil İbrahim Kalkan 8 years ago
parent 37086fe523
commit 503f1d26a5

@ -6,7 +6,6 @@ using Volo.Abp.Identity.Web.Localization.Resource;
using Volo.Abp.Identity.Web.Navigation;
using Volo.Abp.Identity.Web.ObjectMappings;
using Volo.Abp.Localization;
using Volo.Abp.Localization.Resources.Validation;
using Volo.Abp.Modularity;
using Volo.Abp.Ui.Navigation;
using Volo.Abp.VirtualFileSystem;
@ -42,9 +41,7 @@ namespace Volo.Abp.Identity.Web
services.Configure<AbpLocalizationOptions>(options =>
{
//TODO: Declare base type by attribute
options.Resources.AddJson<IdentityResource>("en")
.InheritFrom(typeof(AbpValidationResource));
options.Resources.AddJson<IdentityResource>("en");
});
services.Configure<AbpAutoMapperOptions>(options =>

@ -1,8 +1,10 @@
using Volo.Abp.Localization;
using Volo.Abp.Localization.Resources.Validation;
namespace Volo.Abp.Identity.Web.Localization.Resource
{
[ShortLocalizationResourceName("AbpIdentity")]
[InheritResource(typeof(AbpValidationResource))]
public class IdentityResource
{

@ -0,0 +1,11 @@
using System;
using JetBrains.Annotations;
namespace Volo.Abp.Localization
{
public interface IInheritedResourceTypesProvider
{
[NotNull]
Type[] GetInheritedModuleTypes();
}
}

@ -0,0 +1,20 @@
using System;
namespace Volo.Abp.Localization
{
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
public class InheritResourceAttribute : Attribute, IInheritedResourceTypesProvider
{
public Type[] ResourceTypes { get; }
public InheritResourceAttribute(params Type[] resourceTypes)
{
ResourceTypes = resourceTypes ?? new Type[0];
}
public Type[] GetInheritedModuleTypes()
{
return ResourceTypes;
}
}
}

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using JetBrains.Annotations;
namespace Volo.Abp.Localization
@ -28,6 +29,8 @@ namespace Volo.Abp.Localization
BaseResourceTypes = new List<Type>();
Extensions = new List<ILocalizationDictionaryProvider>();
AddBaseResourceTypes();
}
public virtual void Initialize(IServiceProvider serviceProvider) //TODO: Create a LocalizationResourceInitializationContext!
@ -40,5 +43,20 @@ namespace Volo.Abp.Localization
DictionaryProvider.Extend(extension);
}
}
protected virtual void AddBaseResourceTypes()
{
var descriptors = ResourceType
.GetCustomAttributes(true)
.OfType<IInheritedResourceTypesProvider>();
foreach (var descriptor in descriptors)
{
foreach (var baseResourceType in descriptor.GetInheritedModuleTypes())
{
BaseResourceTypes.AddIfNotContains(baseResourceType);
}
}
}
}
}

@ -22,7 +22,6 @@ namespace Volo.Abp.Modularity
var dependencies = new List<Type>();
var dependencyDescriptors = moduleType
.GetTypeInfo()
.GetCustomAttributes()
.OfType<IDependedModuleTypesProvider>();

@ -25,7 +25,6 @@ namespace Volo.Abp.Modularity
DependedModuleTypes = dependedModuleTypes ?? new Type[0];
}
[NotNull]
public virtual Type[] GetDependedModuleTypes()
{
return DependedModuleTypes;

@ -112,14 +112,7 @@ namespace Volo.Abp.Localization
{
options.Resources.AddJson<LocalizationTestValidationResource>("en");
options.Resources.AddJson<LocalizationTestCountryNamesResource>("en");
//TODO: Declare base type by attribute
options.Resources.AddJson<LocalizationTestResource>("en")
.InheritFrom(
typeof(LocalizationTestValidationResource),
typeof(LocalizationTestCountryNamesResource)
);
options.Resources.AddJson<LocalizationTestResource>("en");
options.Resources.ExtendWithJson<LocalizationTestResource, LocalizationTestResourceExt>();
});
}

@ -1,5 +1,10 @@
namespace Volo.Abp.Localization.Source
using Volo.Abp.Localization.Base.CountryNames;
using Volo.Abp.Localization.Base.Validation;
namespace Volo.Abp.Localization.Source
{
[InheritResource(typeof(LocalizationTestValidationResource))]
[InheritResource(typeof(LocalizationTestCountryNamesResource))]
public sealed class LocalizationTestResource
{

Loading…
Cancel
Save