Browse Source

Use the Scoped service.

pull/1718/head
maliming 7 years ago
parent
commit
cc245a69f8
  1. 58
      framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/DefaultAbpRequestLocalizationOptionsProvider.cs

58
framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/RequestLocalization/DefaultAbpRequestLocalizationOptionsProvider.cs

@ -4,6 +4,7 @@ using System.Globalization;
using System.Linq; using System.Linq;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Localization; using Microsoft.AspNetCore.Localization;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.Localization; using Volo.Abp.Localization;
using Volo.Abp.Settings; using Volo.Abp.Settings;
@ -13,46 +14,49 @@ namespace Microsoft.AspNetCore.RequestLocalization
{ {
public class DefaultAbpRequestLocalizationOptionsProvider : IAbpRequestLocalizationOptionsProvider, ISingletonDependency public class DefaultAbpRequestLocalizationOptionsProvider : IAbpRequestLocalizationOptionsProvider, ISingletonDependency
{ {
private readonly ILanguageProvider _languageProvider; private readonly IServiceProvider _serviceProvider;
private readonly ISettingProvider _settingProvider;
private Lazy<RequestLocalizationOptions> _lazyRequestLocalizationOptions; private Lazy<RequestLocalizationOptions> _lazyRequestLocalizationOptions;
public DefaultAbpRequestLocalizationOptionsProvider(ILanguageProvider languageProvider, public DefaultAbpRequestLocalizationOptionsProvider(IServiceProvider serviceProvider)
ISettingProvider settingProvider)
{ {
_languageProvider = languageProvider; _serviceProvider = serviceProvider;
_settingProvider = settingProvider;
} }
public void InitLocalizationOptions(Action<RequestLocalizationOptions> optionsAction = null) public void InitLocalizationOptions(Action<RequestLocalizationOptions> optionsAction = null)
{ {
_lazyRequestLocalizationOptions = new Lazy<RequestLocalizationOptions>(() => _lazyRequestLocalizationOptions = new Lazy<RequestLocalizationOptions>(() =>
{ {
var languages = AsyncHelper.RunSync(_languageProvider.GetLanguagesAsync); using (var serviceScope = _serviceProvider.CreateScope())
var defaultLanguage = AsyncHelper.RunSync(() => {
_settingProvider.GetOrNullAsync(LocalizationSettingNames.DefaultLanguage)); var languageProvider = serviceScope.ServiceProvider.GetRequiredService<ILanguageProvider>();
var settingProvider = serviceScope.ServiceProvider.GetRequiredService<ISettingProvider>();
var options = !languages.Any() var languages = AsyncHelper.RunSync(languageProvider.GetLanguagesAsync);
? new RequestLocalizationOptions() var defaultLanguage = AsyncHelper.RunSync(() =>
: new RequestLocalizationOptions settingProvider.GetOrNullAsync(LocalizationSettingNames.DefaultLanguage));
{
DefaultRequestCulture = DefaultGetRequestCulture(defaultLanguage, languages),
SupportedCultures = languages var options = !languages.Any()
.Select(l => l.CultureName) ? new RequestLocalizationOptions()
.Distinct() : new RequestLocalizationOptions
.Select(c => new CultureInfo(c)) {
.ToArray(), DefaultRequestCulture = DefaultGetRequestCulture(defaultLanguage, languages),
SupportedUICultures = languages SupportedCultures = languages
.Select(l => l.UiCultureName) .Select(l => l.CultureName)
.Distinct() .Distinct()
.Select(c => new CultureInfo(c)) .Select(c => new CultureInfo(c))
.ToArray() .ToArray(),
};
optionsAction?.Invoke(options); SupportedUICultures = languages
return options; .Select(l => l.UiCultureName)
.Distinct()
.Select(c => new CultureInfo(c))
.ToArray()
};
optionsAction?.Invoke(options);
return options;
}
}, true); }, true);
} }

Loading…
Cancel
Save