From d9fc39953143367a2fc3dab650859dc1a06b328e Mon Sep 17 00:00:00 2001 From: John Luo Date: Tue, 22 Dec 2015 21:20:21 -0800 Subject: [PATCH] Standardizing middleware to use configureOptions lambda --- samples/LocalizationSample/Startup.cs | 26 ++-- .../ApplicationBuilderExtensions.cs | 12 +- .../StartupResourcesAtRootFolder.cs | 16 +-- .../StartupResourcesInFolder.cs | 16 +-- ...anguageHeaderRequestCultureProviderTest.cs | 48 +++---- .../CookieRequestCultureProviderTest.cs | 63 ++++----- .../CustomRequestCultureProviderTest.cs | 27 ++-- .../QueryStringRequestCultureProviderTest.cs | 129 ++++++++---------- 8 files changed, 158 insertions(+), 179 deletions(-) diff --git a/samples/LocalizationSample/Startup.cs b/samples/LocalizationSample/Startup.cs index d2f4392c55..b7bc89cc85 100644 --- a/samples/LocalizationSample/Startup.cs +++ b/samples/LocalizationSample/Startup.cs @@ -23,12 +23,12 @@ namespace LocalizationSample public void Configure(IApplicationBuilder app, IStringLocalizer SR) { - var options = new RequestLocalizationOptions + app.UseRequestLocalization(options => { - DefaultRequestCulture = new RequestCulture("en-US"), + options.DefaultRequestCulture = new RequestCulture("en-US"); // Set options here to change middleware behavior - SupportedCultures = new List + options.SupportedCultures = new List { new CultureInfo("en-US"), new CultureInfo("en-AU"), @@ -39,8 +39,8 @@ namespace LocalizationSample new CultureInfo("zh"), new CultureInfo("zh-CN"), new CultureInfo("zh-CHT") - }, - SupportedUICultures = new List + }; + options.SupportedUICultures = new List { new CultureInfo("en-US"), new CultureInfo("en-AU"), @@ -51,17 +51,15 @@ namespace LocalizationSample new CultureInfo("zh"), new CultureInfo("zh-CN"), new CultureInfo("zh-CHT") - } - }; + }; - // Optionally create an app-specific provider with just a delegate, e.g. look up user preference from DB. - // Inserting it as position 0 ensures it has priority over any of the default providers. - //options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context => - //{ - - //})); + // Optionally create an app-specific provider with just a delegate, e.g. look up user preference from DB. + // Inserting it as position 0 ensures it has priority over any of the default providers. + //options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context => + //{ - app.UseRequestLocalization(options); + //})); + }); app.Use(async (context, next) => { diff --git a/src/Microsoft.AspNet.Localization/ApplicationBuilderExtensions.cs b/src/Microsoft.AspNet.Localization/ApplicationBuilderExtensions.cs index 2f4d77dd6e..531373a92d 100644 --- a/src/Microsoft.AspNet.Localization/ApplicationBuilderExtensions.cs +++ b/src/Microsoft.AspNet.Localization/ApplicationBuilderExtensions.cs @@ -17,22 +17,24 @@ namespace Microsoft.AspNet.Builder /// requests based on information provided by the client. /// /// The . - /// The options to configure the middleware with. + /// An action delegate to configure the provided . /// The . public static IApplicationBuilder UseRequestLocalization( this IApplicationBuilder app, - RequestLocalizationOptions options) + Action configureOptions) { if (app == null) { throw new ArgumentNullException(nameof(app)); } - - if (options == null) + if (configureOptions == null) { - throw new ArgumentNullException(nameof(options)); + throw new ArgumentNullException(nameof(configureOptions)); } + var options = new RequestLocalizationOptions(); + configureOptions(options); + return app.UseMiddleware(options); } } diff --git a/test/LocalizationWebsite/StartupResourcesAtRootFolder.cs b/test/LocalizationWebsite/StartupResourcesAtRootFolder.cs index 4c59715137..d9135615a0 100644 --- a/test/LocalizationWebsite/StartupResourcesAtRootFolder.cs +++ b/test/LocalizationWebsite/StartupResourcesAtRootFolder.cs @@ -29,20 +29,18 @@ namespace LocalizationWebsite { loggerFactory.AddConsole(minLevel: LogLevel.Warning); - var options = new RequestLocalizationOptions + app.UseRequestLocalization(options => { - DefaultRequestCulture = new RequestCulture("en-US"), - SupportedCultures = new List() + options.DefaultRequestCulture = new RequestCulture("en-US"); + options.SupportedCultures = new List() { new CultureInfo("fr-FR") - }, - SupportedUICultures = new List() + }; + options.SupportedUICultures = new List() { new CultureInfo("fr-FR") - } - }; - - app.UseRequestLocalization(options); + }; + }); var stringLocalizer = stringLocalizerFactory.Create("Test", location: null); diff --git a/test/LocalizationWebsite/StartupResourcesInFolder.cs b/test/LocalizationWebsite/StartupResourcesInFolder.cs index 32f2dd923b..b880b643b7 100644 --- a/test/LocalizationWebsite/StartupResourcesInFolder.cs +++ b/test/LocalizationWebsite/StartupResourcesInFolder.cs @@ -29,20 +29,18 @@ namespace LocalizationWebsite { loggerFactory.AddConsole(minLevel: LogLevel.Warning); - var options = new RequestLocalizationOptions + app.UseRequestLocalization(options => { - DefaultRequestCulture = new RequestCulture("en-US"), - SupportedCultures = new List() + options.DefaultRequestCulture = new RequestCulture("en-US"); + options.SupportedCultures = new List() { new CultureInfo("fr-FR") - }, - SupportedUICultures = new List() + }; + options.SupportedUICultures = new List() { new CultureInfo("fr-FR") - } - }; - - app.UseRequestLocalization(options); + }; + }); var stringLocalizer = stringLocalizerFactory.Create("Test", location: null); diff --git a/test/Microsoft.AspNet.Localization.Tests/AcceptLanguageHeaderRequestCultureProviderTest.cs b/test/Microsoft.AspNet.Localization.Tests/AcceptLanguageHeaderRequestCultureProviderTest.cs index 4704573e43..92cd7f37ef 100644 --- a/test/Microsoft.AspNet.Localization.Tests/AcceptLanguageHeaderRequestCultureProviderTest.cs +++ b/test/Microsoft.AspNet.Localization.Tests/AcceptLanguageHeaderRequestCultureProviderTest.cs @@ -21,16 +21,15 @@ namespace Microsoft.Extensions.Localization.Tests var builder = new WebApplicationBuilder() .Configure(app => { - var options = new RequestLocalizationOptions + app.UseRequestLocalization(options => { - DefaultRequestCulture = new RequestCulture("en-US"), - SupportedCultures = new List + options.DefaultRequestCulture = new RequestCulture("en-US"); + options.SupportedCultures = new List { new CultureInfo("ar-SA"), new CultureInfo("en-US") - } - }; - app.UseRequestLocalization(options); + }; + }); app.Run(context => { var requestCultureFeature = context.Features.Get(); @@ -56,16 +55,15 @@ namespace Microsoft.Extensions.Localization.Tests var builder = new WebApplicationBuilder() .Configure(app => { - var options = new RequestLocalizationOptions + app.UseRequestLocalization(options => { - DefaultRequestCulture = new RequestCulture("fr-FR"), - SupportedCultures = new List + options.DefaultRequestCulture = new RequestCulture("fr-FR"); + options.SupportedCultures = new List { new CultureInfo("ar-SA"), new CultureInfo("en-US") - } - }; - app.UseRequestLocalization(options); + }; + }); app.Run(context => { var requestCultureFeature = context.Features.Get(); @@ -90,16 +88,15 @@ namespace Microsoft.Extensions.Localization.Tests var builder = new WebApplicationBuilder() .Configure(app => { - var options = new RequestLocalizationOptions + app.UseRequestLocalization(options => { - DefaultRequestCulture = new RequestCulture("fr-FR"), - SupportedCultures = new List + options.DefaultRequestCulture = new RequestCulture("fr-FR"); + options.SupportedCultures = new List { new CultureInfo("ar-SA"), new CultureInfo("af-ZA") - } - }; - app.UseRequestLocalization(options); + }; + }); app.Run(context => { var requestCultureFeature = context.Features.Get(); @@ -125,19 +122,18 @@ namespace Microsoft.Extensions.Localization.Tests var builder = new WebApplicationBuilder() .Configure(app => { - var options = new RequestLocalizationOptions() + app.UseRequestLocalization(options => { - DefaultRequestCulture = new RequestCulture("en-US"), - SupportedCultures = new List + options.DefaultRequestCulture = new RequestCulture("en-US"); + options.SupportedCultures = new List { new CultureInfo("ar-YE") - }, - SupportedUICultures = new List + }; + options.SupportedUICultures = new List { new CultureInfo("ar-YE") - } - }; - app.UseRequestLocalization(options); + }; + }); app.Run(context => { var requestCultureFeature = context.Features.Get(); diff --git a/test/Microsoft.AspNet.Localization.Tests/CookieRequestCultureProviderTest.cs b/test/Microsoft.AspNet.Localization.Tests/CookieRequestCultureProviderTest.cs index 8ebb629c9c..d4e043e6ed 100644 --- a/test/Microsoft.AspNet.Localization.Tests/CookieRequestCultureProviderTest.cs +++ b/test/Microsoft.AspNet.Localization.Tests/CookieRequestCultureProviderTest.cs @@ -22,22 +22,21 @@ namespace Microsoft.Extensions.Localization.Tests var builder = new WebApplicationBuilder() .Configure(app => { - var options = new RequestLocalizationOptions() + app.UseRequestLocalization(options => { - DefaultRequestCulture = new RequestCulture("en-US"), - SupportedCultures = new List + options.DefaultRequestCulture = new RequestCulture("en-US"); + options.SupportedCultures = new List { new CultureInfo("ar-SA") - }, - SupportedUICultures = new List + }; + options.SupportedUICultures = new List { new CultureInfo("ar-SA") - } - }; - var provider = new CookieRequestCultureProvider(); - provider.CookieName = "Preferences"; - options.RequestCultureProviders.Insert(0, provider); - app.UseRequestLocalization(options); + }; + var provider = new CookieRequestCultureProvider(); + provider.CookieName = "Preferences"; + options.RequestCultureProviders.Insert(0, provider); + }); app.Run(context => { var requestCultureFeature = context.Features.Get(); @@ -65,22 +64,21 @@ namespace Microsoft.Extensions.Localization.Tests var builder = new WebApplicationBuilder() .Configure(app => { - var options = new RequestLocalizationOptions() + app.UseRequestLocalization(options => { - DefaultRequestCulture = new RequestCulture("en-US"), - SupportedCultures = new List + options.DefaultRequestCulture = new RequestCulture("en-US"); + options.SupportedCultures = new List { new CultureInfo("ar-SA") - }, - SupportedUICultures = new List + }; + options.SupportedUICultures = new List { new CultureInfo("ar-SA") - } - }; - var provider = new CookieRequestCultureProvider(); - provider.CookieName = "Preferences"; - options.RequestCultureProviders.Insert(0, provider); - app.UseRequestLocalization(options); + }; + var provider = new CookieRequestCultureProvider(); + provider.CookieName = "Preferences"; + options.RequestCultureProviders.Insert(0, provider); + }); app.Run(context => { var requestCultureFeature = context.Features.Get(); @@ -104,22 +102,21 @@ namespace Microsoft.Extensions.Localization.Tests var builder = new WebApplicationBuilder() .Configure(app => { - var options = new RequestLocalizationOptions() + app.UseRequestLocalization(options => { - DefaultRequestCulture = new RequestCulture("en-US"), - SupportedCultures = new List + options.DefaultRequestCulture = new RequestCulture("en-US"); + options.SupportedCultures = new List { new CultureInfo("ar-SA") - }, - SupportedUICultures = new List + }; + options.SupportedUICultures = new List { new CultureInfo("ar-SA") - } - }; - var provider = new CookieRequestCultureProvider(); - provider.CookieName = "Preferences"; - options.RequestCultureProviders.Insert(0, provider); - app.UseRequestLocalization(options); + }; + var provider = new CookieRequestCultureProvider(); + provider.CookieName = "Preferences"; + options.RequestCultureProviders.Insert(0, provider); + }); app.Run(context => { var requestCultureFeature = context.Features.Get(); diff --git a/test/Microsoft.AspNet.Localization.Tests/CustomRequestCultureProviderTest.cs b/test/Microsoft.AspNet.Localization.Tests/CustomRequestCultureProviderTest.cs index 95984e9c38..8beec941c1 100644 --- a/test/Microsoft.AspNet.Localization.Tests/CustomRequestCultureProviderTest.cs +++ b/test/Microsoft.AspNet.Localization.Tests/CustomRequestCultureProviderTest.cs @@ -23,25 +23,24 @@ namespace Microsoft.Extensions.Localization.Tests var builder = new WebApplicationBuilder() .Configure(app => { - var options = new RequestLocalizationOptions() + app.UseRequestLocalization(options => { - DefaultRequestCulture = new RequestCulture("en-US"), - SupportedCultures = new List + options.DefaultRequestCulture = new RequestCulture("en-US"); + options.SupportedCultures = new List { new CultureInfo("ar") - }, - SupportedUICultures = new List + }; + options.SupportedUICultures = new List { new CultureInfo("ar") - } - }; - options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(context => - { - var culture = GetCultureInfoFromUrl(context, options.SupportedCultures); - var requestCulture = new ProviderCultureResult(culture); - return Task.FromResult(requestCulture); - })); - app.UseRequestLocalization(options); + }; + options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(context => + { + var culture = GetCultureInfoFromUrl(context, options.SupportedCultures); + var requestCulture = new ProviderCultureResult(culture); + return Task.FromResult(requestCulture); + })); + }); app.Run(context => { var requestCultureFeature = context.Features.Get(); diff --git a/test/Microsoft.AspNet.Localization.Tests/QueryStringRequestCultureProviderTest.cs b/test/Microsoft.AspNet.Localization.Tests/QueryStringRequestCultureProviderTest.cs index 8bb27a8368..1573f33bd6 100644 --- a/test/Microsoft.AspNet.Localization.Tests/QueryStringRequestCultureProviderTest.cs +++ b/test/Microsoft.AspNet.Localization.Tests/QueryStringRequestCultureProviderTest.cs @@ -21,20 +21,18 @@ namespace Microsoft.Extensions.Localization.Tests var builder = new WebApplicationBuilder() .Configure(app => { - var options = new RequestLocalizationOptions() + app.UseRequestLocalization(options => { - DefaultRequestCulture = new RequestCulture("en-US"), - SupportedCultures = new List + options.DefaultRequestCulture = new RequestCulture("en-US"); + options.SupportedCultures = new List { new CultureInfo("ar-SA") - }, - SupportedUICultures = new List + }; + options.SupportedUICultures = new List { new CultureInfo("ar-YE") - } - }; - - app.UseRequestLocalization(options); + }; + }); app.Run(context => { var requestCultureFeature = context.Features.Get(); @@ -58,11 +56,10 @@ namespace Microsoft.Extensions.Localization.Tests var builder = new WebApplicationBuilder() .Configure(app => { - var options = new RequestLocalizationOptions + app.UseRequestLocalization(options => { - DefaultRequestCulture = new RequestCulture("en-US"), - }; - app.UseRequestLocalization(options); + options.DefaultRequestCulture = new RequestCulture("en-US"); + }); app.Run(context => { var requestCultureFeature = context.Features.Get(); @@ -86,19 +83,18 @@ namespace Microsoft.Extensions.Localization.Tests var builder = new WebApplicationBuilder() .Configure(app => { - var options = new RequestLocalizationOptions() + app.UseRequestLocalization(options => { - DefaultRequestCulture = new RequestCulture("en-US"), - SupportedCultures = new List + options.DefaultRequestCulture = new RequestCulture("en-US"); + options.SupportedCultures = new List { new CultureInfo("ar-SA") - }, - SupportedUICultures = new List + }; + options.SupportedUICultures = new List { new CultureInfo("ar-SA") - } - }; - app.UseRequestLocalization(options); + }; + }); app.Run(context => { var requestCultureFeature = context.Features.Get(); @@ -121,19 +117,18 @@ namespace Microsoft.Extensions.Localization.Tests var builder = new WebApplicationBuilder() .Configure(app => { - var options = new RequestLocalizationOptions() + app.UseRequestLocalization(options => { - DefaultRequestCulture = new RequestCulture("en-US"), - SupportedCultures = new List + options.DefaultRequestCulture = new RequestCulture("en-US"); + options.SupportedCultures = new List { new CultureInfo("ar-SA") - }, - SupportedUICultures = new List + }; + options.SupportedUICultures = new List { new CultureInfo("ar-SA") - } - }; - app.UseRequestLocalization(options); + }; + }); app.Run(context => { var requestCultureFeature = context.Features.Get(); @@ -156,19 +151,18 @@ namespace Microsoft.Extensions.Localization.Tests var builder = new WebApplicationBuilder() .Configure(app => { - var options = new RequestLocalizationOptions() + app.UseRequestLocalization(options => { - DefaultRequestCulture = new RequestCulture("en-US"), - SupportedCultures = new List + options.DefaultRequestCulture = new RequestCulture("en-US"); + options.SupportedCultures = new List { new CultureInfo("ar-SA") - }, - SupportedUICultures = new List + }; + options.SupportedUICultures = new List { new CultureInfo("ar-SA") - } - }; - app.UseRequestLocalization(options); + }; + }); app.Run(context => { var requestCultureFeature = context.Features.Get(); @@ -192,19 +186,18 @@ namespace Microsoft.Extensions.Localization.Tests var builder = new WebApplicationBuilder() .Configure(app => { - var options = new RequestLocalizationOptions() + app.UseRequestLocalization(options => { - DefaultRequestCulture = new RequestCulture("en-US"), - SupportedCultures = new List + options.DefaultRequestCulture = new RequestCulture("en-US"); + options.SupportedCultures = new List { new CultureInfo("ar-SA") - }, - SupportedUICultures = new List + }; + options.SupportedUICultures = new List { new CultureInfo("ar-SA") - } - }; - app.UseRequestLocalization(options); + }; + }); app.Run(context => { var requestCultureFeature = context.Features.Get(); @@ -228,23 +221,22 @@ namespace Microsoft.Extensions.Localization.Tests var builder = new WebApplicationBuilder() .Configure(app => { - var options = new RequestLocalizationOptions() + app.UseRequestLocalization(options => { - DefaultRequestCulture = new RequestCulture("en-US"), - SupportedCultures = new List + options.DefaultRequestCulture = new RequestCulture("en-US"); + options.SupportedCultures = new List { new CultureInfo("ar-SA") - }, - SupportedUICultures = new List + }; + options.SupportedUICultures = new List { new CultureInfo("ar-YE") - } - }; - var provider = new QueryStringRequestCultureProvider(); - provider.QueryStringKey = "c"; - provider.UIQueryStringKey = "uic"; - options.RequestCultureProviders.Insert(0, provider); - app.UseRequestLocalization(options); + }; + var provider = new QueryStringRequestCultureProvider(); + provider.QueryStringKey = "c"; + provider.UIQueryStringKey = "uic"; + options.RequestCultureProviders.Insert(0, provider); + }); app.Run(context => { var requestCultureFeature = context.Features.Get(); @@ -268,23 +260,22 @@ namespace Microsoft.Extensions.Localization.Tests var builder = new WebApplicationBuilder() .Configure(app => { - var options = new RequestLocalizationOptions() + app.UseRequestLocalization(options => { - DefaultRequestCulture = new RequestCulture("en-US"), - SupportedCultures = new List + options.DefaultRequestCulture = new RequestCulture("en-US"); + options.SupportedCultures = new List { new CultureInfo("FR") - }, - SupportedUICultures = new List + }; + options.SupportedUICultures = new List { new CultureInfo("FR") - } - }; - var provider = new QueryStringRequestCultureProvider(); - provider.QueryStringKey = "c"; - provider.UIQueryStringKey = "uic"; - options.RequestCultureProviders.Insert(0, provider); - app.UseRequestLocalization(options); + }; + var provider = new QueryStringRequestCultureProvider(); + provider.QueryStringKey = "c"; + provider.UIQueryStringKey = "uic"; + options.RequestCultureProviders.Insert(0, provider); + }); app.Run(context => { var requestCultureFeature = context.Features.Get();