Allow to use a resource for data annotations in an assembly.

pull/179/head
Halil İbrahim Kalkan 8 years ago
parent f2ce836ef1
commit 575f294595

@ -17,6 +17,7 @@ using Microsoft.AspNetCore.Mvc.ViewComponents;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Volo.Abp.AspNetCore.Mvc.Conventions;
using Volo.Abp.AspNetCore.Mvc.DependencyInjection;
using Volo.Abp.AspNetCore.Mvc.Localization;
using Volo.Abp.AspNetCore.VirtualFileSystem;
using Volo.Abp.Http;
using Volo.Abp.Http.Modeling;
@ -65,12 +66,23 @@ namespace Volo.Abp.AspNetCore.Mvc
});
var mvcCoreBuilder = services.AddMvcCore();
services.GetPreConfigureActions<IMvcCoreBuilder>().Configure(mvcCoreBuilder);
services.ExecutePreConfiguredActions(mvcCoreBuilder);
var mvcBuilder = services.AddMvc().AddControllersAsServices();
services.GetPreConfigureActions<IMvcBuilder>().Configure(mvcBuilder);
var mvcBuilder = services.AddMvc()
.AddDataAnnotationsLocalization(options =>
{
var assemblyResources = services.ExecutePreConfiguredActions(new AbpMvcDataAnnotationsLocalizationOptions()).AssemblyResources;
options.DataAnnotationLocalizerProvider = (type, factory) =>
{
var resourceType = assemblyResources.GetOrDefault(type.Assembly);
return factory.Create(resourceType ?? type);
};
});
services.ExecutePreConfiguredActions(mvcBuilder);
//TODO: AddLocalization and AddViewLocalization by default..?
//TODO: AddViewLocalization by default..?
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.TryAddSingleton<IActionContextAccessor, ActionContextAccessor>();

@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Reflection;
using JetBrains.Annotations;
namespace Volo.Abp.AspNetCore.Mvc.Localization
{
public class AbpMvcDataAnnotationsLocalizationOptions
{
public IDictionary<Assembly, Type> AssemblyResources { get; }
public AbpMvcDataAnnotationsLocalizationOptions()
{
AssemblyResources = new Dictionary<Assembly, Type>();
}
public void AddAssemblyResource([NotNull] Type resourceType, [CanBeNull] Assembly assembly = null)
{
if (assembly == null)
{
assembly = resourceType.Assembly;
}
AssemblyResources[assembly] = resourceType;
}
}
}

@ -1,4 +1,7 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc.Localization;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap;
using Volo.Abp.AutoMapper;
using Volo.Abp.Identity.Web.Areas.Identity.Localization.Resource;
@ -15,6 +18,14 @@ namespace Volo.Abp.Identity.Web
[DependsOn(typeof(AbpAspNetCoreMvcUiBootstrapModule))]
public class AbpIdentityWebModule : AbpModule
{
public override void PreConfigureServices(IServiceCollection services)
{
services.PreConfigure<AbpMvcDataAnnotationsLocalizationOptions>(options =>
{
options.AddAssemblyResource(typeof(IdentityResource));
});
}
public override void ConfigureServices(IServiceCollection services)
{
services.AddAssemblyOf<AbpIdentityWebModule>();

@ -49,19 +49,23 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users
{
[Required]
[MaxLength(IdentityUserConsts.MaxUserNameLength)]
[Display(Name = "UserName")]
public string UserName { get; set; }
[Required]
[MaxLength(IdentityUserConsts.MaxPasswordLength)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[Required]
[EmailAddress]
[MaxLength(IdentityUserConsts.MaxEmailLength)]
[Display(Name = "EmailAddress")]
public string Email { get; set; }
[MaxLength(IdentityUserConsts.MaxPhoneNumberLength)]
[Display(Name = "PhoneNumber")]
public string PhoneNumber { get; set; }
}

@ -2,7 +2,6 @@ using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc.RazorPages;
@ -62,14 +61,17 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users
[Required]
[MaxLength(IdentityUserConsts.MaxUserNameLength)]
[Display(Name = "UserName")]
public string UserName { get; set; }
[Required]
[EmailAddress]
[MaxLength(IdentityUserConsts.MaxEmailLength)]
[Display(Name = "EmailAddress")]
public string Email { get; set; }
[MaxLength(IdentityUserConsts.MaxPhoneNumberLength)]
[Display(Name = "PhoneNumber")]
public string PhoneNumber { get; set; }
}

@ -12,6 +12,12 @@ namespace Microsoft.Extensions.DependencyInjection
return services;
}
public static TOptions ExecutePreConfiguredActions<TOptions>(this IServiceCollection services, TOptions options)
{
services.GetPreConfigureActions<TOptions>().Configure(options);
return options;
}
public static PreConfigureActionList<TOptions> GetPreConfigureActions<TOptions>(this IServiceCollection services)
{
var actionList = services.GetSingletonInstanceOrNull<IObjectAccessor<PreConfigureActionList<TOptions>>>()?.Value;

Loading…
Cancel
Save