Standardizing middleware to use configureOptions lambda

This commit is contained in:
John Luo 2015-12-22 21:20:21 -08:00
parent 489250a8e1
commit d9fc399531
8 changed files with 158 additions and 179 deletions

View File

@ -23,12 +23,12 @@ namespace LocalizationSample
public void Configure(IApplicationBuilder app, IStringLocalizer<Startup> SR) public void Configure(IApplicationBuilder app, IStringLocalizer<Startup> 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 // Set options here to change middleware behavior
SupportedCultures = new List<CultureInfo> options.SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("en-US"), new CultureInfo("en-US"),
new CultureInfo("en-AU"), new CultureInfo("en-AU"),
@ -39,8 +39,8 @@ namespace LocalizationSample
new CultureInfo("zh"), new CultureInfo("zh"),
new CultureInfo("zh-CN"), new CultureInfo("zh-CN"),
new CultureInfo("zh-CHT") new CultureInfo("zh-CHT")
}, };
SupportedUICultures = new List<CultureInfo> options.SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("en-US"), new CultureInfo("en-US"),
new CultureInfo("en-AU"), new CultureInfo("en-AU"),
@ -51,17 +51,15 @@ namespace LocalizationSample
new CultureInfo("zh"), new CultureInfo("zh"),
new CultureInfo("zh-CN"), new CultureInfo("zh-CN"),
new CultureInfo("zh-CHT") new CultureInfo("zh-CHT")
} };
};
// Optionally create an app-specific provider with just a delegate, e.g. look up user preference from DB. // 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. // Inserting it as position 0 ensures it has priority over any of the default providers.
//options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context => //options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context =>
//{ //{
//}));
app.UseRequestLocalization(options); //}));
});
app.Use(async (context, next) => app.Use(async (context, next) =>
{ {

View File

@ -17,22 +17,24 @@ namespace Microsoft.AspNet.Builder
/// requests based on information provided by the client. /// requests based on information provided by the client.
/// </summary> /// </summary>
/// <param name="app">The <see cref="IApplicationBuilder"/>.</param> /// <param name="app">The <see cref="IApplicationBuilder"/>.</param>
/// <param name="options">The options to configure the middleware with.</param> /// <param name="configureOptions">An action delegate to configure the provided <see cref="RequestLocalizationOptions"/>.</param>
/// <returns>The <see cref="IApplicationBuilder"/>.</returns> /// <returns>The <see cref="IApplicationBuilder"/>.</returns>
public static IApplicationBuilder UseRequestLocalization( public static IApplicationBuilder UseRequestLocalization(
this IApplicationBuilder app, this IApplicationBuilder app,
RequestLocalizationOptions options) Action<RequestLocalizationOptions> configureOptions)
{ {
if (app == null) if (app == null)
{ {
throw new ArgumentNullException(nameof(app)); throw new ArgumentNullException(nameof(app));
} }
if (configureOptions == null)
if (options == null)
{ {
throw new ArgumentNullException(nameof(options)); throw new ArgumentNullException(nameof(configureOptions));
} }
var options = new RequestLocalizationOptions();
configureOptions(options);
return app.UseMiddleware<RequestLocalizationMiddleware>(options); return app.UseMiddleware<RequestLocalizationMiddleware>(options);
} }
} }

View File

@ -29,20 +29,18 @@ namespace LocalizationWebsite
{ {
loggerFactory.AddConsole(minLevel: LogLevel.Warning); loggerFactory.AddConsole(minLevel: LogLevel.Warning);
var options = new RequestLocalizationOptions app.UseRequestLocalization(options =>
{ {
DefaultRequestCulture = new RequestCulture("en-US"), options.DefaultRequestCulture = new RequestCulture("en-US");
SupportedCultures = new List<CultureInfo>() options.SupportedCultures = new List<CultureInfo>()
{ {
new CultureInfo("fr-FR") new CultureInfo("fr-FR")
}, };
SupportedUICultures = new List<CultureInfo>() options.SupportedUICultures = new List<CultureInfo>()
{ {
new CultureInfo("fr-FR") new CultureInfo("fr-FR")
} };
}; });
app.UseRequestLocalization(options);
var stringLocalizer = stringLocalizerFactory.Create("Test", location: null); var stringLocalizer = stringLocalizerFactory.Create("Test", location: null);

View File

@ -29,20 +29,18 @@ namespace LocalizationWebsite
{ {
loggerFactory.AddConsole(minLevel: LogLevel.Warning); loggerFactory.AddConsole(minLevel: LogLevel.Warning);
var options = new RequestLocalizationOptions app.UseRequestLocalization(options =>
{ {
DefaultRequestCulture = new RequestCulture("en-US"), options.DefaultRequestCulture = new RequestCulture("en-US");
SupportedCultures = new List<CultureInfo>() options.SupportedCultures = new List<CultureInfo>()
{ {
new CultureInfo("fr-FR") new CultureInfo("fr-FR")
}, };
SupportedUICultures = new List<CultureInfo>() options.SupportedUICultures = new List<CultureInfo>()
{ {
new CultureInfo("fr-FR") new CultureInfo("fr-FR")
} };
}; });
app.UseRequestLocalization(options);
var stringLocalizer = stringLocalizerFactory.Create("Test", location: null); var stringLocalizer = stringLocalizerFactory.Create("Test", location: null);

View File

@ -21,16 +21,15 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions app.UseRequestLocalization(options =>
{ {
DefaultRequestCulture = new RequestCulture("en-US"), options.DefaultRequestCulture = new RequestCulture("en-US");
SupportedCultures = new List<CultureInfo> options.SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA"), new CultureInfo("ar-SA"),
new CultureInfo("en-US") new CultureInfo("en-US")
} };
}; });
app.UseRequestLocalization(options);
app.Run(context => app.Run(context =>
{ {
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
@ -56,16 +55,15 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions app.UseRequestLocalization(options =>
{ {
DefaultRequestCulture = new RequestCulture("fr-FR"), options.DefaultRequestCulture = new RequestCulture("fr-FR");
SupportedCultures = new List<CultureInfo> options.SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA"), new CultureInfo("ar-SA"),
new CultureInfo("en-US") new CultureInfo("en-US")
} };
}; });
app.UseRequestLocalization(options);
app.Run(context => app.Run(context =>
{ {
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
@ -90,16 +88,15 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions app.UseRequestLocalization(options =>
{ {
DefaultRequestCulture = new RequestCulture("fr-FR"), options.DefaultRequestCulture = new RequestCulture("fr-FR");
SupportedCultures = new List<CultureInfo> options.SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA"), new CultureInfo("ar-SA"),
new CultureInfo("af-ZA") new CultureInfo("af-ZA")
} };
}; });
app.UseRequestLocalization(options);
app.Run(context => app.Run(context =>
{ {
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
@ -125,19 +122,18 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions() app.UseRequestLocalization(options =>
{ {
DefaultRequestCulture = new RequestCulture("en-US"), options.DefaultRequestCulture = new RequestCulture("en-US");
SupportedCultures = new List<CultureInfo> options.SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-YE") new CultureInfo("ar-YE")
}, };
SupportedUICultures = new List<CultureInfo> options.SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("ar-YE") new CultureInfo("ar-YE")
} };
}; });
app.UseRequestLocalization(options);
app.Run(context => app.Run(context =>
{ {
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();

View File

@ -22,22 +22,21 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions() app.UseRequestLocalization(options =>
{ {
DefaultRequestCulture = new RequestCulture("en-US"), options.DefaultRequestCulture = new RequestCulture("en-US");
SupportedCultures = new List<CultureInfo> options.SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}, };
SupportedUICultures = new List<CultureInfo> options.SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
} };
}; var provider = new CookieRequestCultureProvider();
var provider = new CookieRequestCultureProvider(); provider.CookieName = "Preferences";
provider.CookieName = "Preferences"; options.RequestCultureProviders.Insert(0, provider);
options.RequestCultureProviders.Insert(0, provider); });
app.UseRequestLocalization(options);
app.Run(context => app.Run(context =>
{ {
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
@ -65,22 +64,21 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions() app.UseRequestLocalization(options =>
{ {
DefaultRequestCulture = new RequestCulture("en-US"), options.DefaultRequestCulture = new RequestCulture("en-US");
SupportedCultures = new List<CultureInfo> options.SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}, };
SupportedUICultures = new List<CultureInfo> options.SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
} };
}; var provider = new CookieRequestCultureProvider();
var provider = new CookieRequestCultureProvider(); provider.CookieName = "Preferences";
provider.CookieName = "Preferences"; options.RequestCultureProviders.Insert(0, provider);
options.RequestCultureProviders.Insert(0, provider); });
app.UseRequestLocalization(options);
app.Run(context => app.Run(context =>
{ {
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
@ -104,22 +102,21 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions() app.UseRequestLocalization(options =>
{ {
DefaultRequestCulture = new RequestCulture("en-US"), options.DefaultRequestCulture = new RequestCulture("en-US");
SupportedCultures = new List<CultureInfo> options.SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}, };
SupportedUICultures = new List<CultureInfo> options.SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
} };
}; var provider = new CookieRequestCultureProvider();
var provider = new CookieRequestCultureProvider(); provider.CookieName = "Preferences";
provider.CookieName = "Preferences"; options.RequestCultureProviders.Insert(0, provider);
options.RequestCultureProviders.Insert(0, provider); });
app.UseRequestLocalization(options);
app.Run(context => app.Run(context =>
{ {
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();

View File

@ -23,25 +23,24 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions() app.UseRequestLocalization(options =>
{ {
DefaultRequestCulture = new RequestCulture("en-US"), options.DefaultRequestCulture = new RequestCulture("en-US");
SupportedCultures = new List<CultureInfo> options.SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar") new CultureInfo("ar")
}, };
SupportedUICultures = new List<CultureInfo> options.SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("ar") new CultureInfo("ar")
} };
}; options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(context =>
options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(context => {
{ var culture = GetCultureInfoFromUrl(context, options.SupportedCultures);
var culture = GetCultureInfoFromUrl(context, options.SupportedCultures); var requestCulture = new ProviderCultureResult(culture);
var requestCulture = new ProviderCultureResult(culture); return Task.FromResult(requestCulture);
return Task.FromResult(requestCulture); }));
})); });
app.UseRequestLocalization(options);
app.Run(context => app.Run(context =>
{ {
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();

View File

@ -21,20 +21,18 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions() app.UseRequestLocalization(options =>
{ {
DefaultRequestCulture = new RequestCulture("en-US"), options.DefaultRequestCulture = new RequestCulture("en-US");
SupportedCultures = new List<CultureInfo> options.SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}, };
SupportedUICultures = new List<CultureInfo> options.SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("ar-YE") new CultureInfo("ar-YE")
} };
}; });
app.UseRequestLocalization(options);
app.Run(context => app.Run(context =>
{ {
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
@ -58,11 +56,10 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions app.UseRequestLocalization(options =>
{ {
DefaultRequestCulture = new RequestCulture("en-US"), options.DefaultRequestCulture = new RequestCulture("en-US");
}; });
app.UseRequestLocalization(options);
app.Run(context => app.Run(context =>
{ {
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
@ -86,19 +83,18 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions() app.UseRequestLocalization(options =>
{ {
DefaultRequestCulture = new RequestCulture("en-US"), options.DefaultRequestCulture = new RequestCulture("en-US");
SupportedCultures = new List<CultureInfo> options.SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}, };
SupportedUICultures = new List<CultureInfo> options.SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
} };
}; });
app.UseRequestLocalization(options);
app.Run(context => app.Run(context =>
{ {
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
@ -121,19 +117,18 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions() app.UseRequestLocalization(options =>
{ {
DefaultRequestCulture = new RequestCulture("en-US"), options.DefaultRequestCulture = new RequestCulture("en-US");
SupportedCultures = new List<CultureInfo> options.SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}, };
SupportedUICultures = new List<CultureInfo> options.SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
} };
}; });
app.UseRequestLocalization(options);
app.Run(context => app.Run(context =>
{ {
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
@ -156,19 +151,18 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions() app.UseRequestLocalization(options =>
{ {
DefaultRequestCulture = new RequestCulture("en-US"), options.DefaultRequestCulture = new RequestCulture("en-US");
SupportedCultures = new List<CultureInfo> options.SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}, };
SupportedUICultures = new List<CultureInfo> options.SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
} };
}; });
app.UseRequestLocalization(options);
app.Run(context => app.Run(context =>
{ {
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
@ -192,19 +186,18 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions() app.UseRequestLocalization(options =>
{ {
DefaultRequestCulture = new RequestCulture("en-US"), options.DefaultRequestCulture = new RequestCulture("en-US");
SupportedCultures = new List<CultureInfo> options.SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}, };
SupportedUICultures = new List<CultureInfo> options.SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
} };
}; });
app.UseRequestLocalization(options);
app.Run(context => app.Run(context =>
{ {
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
@ -228,23 +221,22 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions() app.UseRequestLocalization(options =>
{ {
DefaultRequestCulture = new RequestCulture("en-US"), options.DefaultRequestCulture = new RequestCulture("en-US");
SupportedCultures = new List<CultureInfo> options.SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}, };
SupportedUICultures = new List<CultureInfo> options.SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("ar-YE") new CultureInfo("ar-YE")
} };
}; var provider = new QueryStringRequestCultureProvider();
var provider = new QueryStringRequestCultureProvider(); provider.QueryStringKey = "c";
provider.QueryStringKey = "c"; provider.UIQueryStringKey = "uic";
provider.UIQueryStringKey = "uic"; options.RequestCultureProviders.Insert(0, provider);
options.RequestCultureProviders.Insert(0, provider); });
app.UseRequestLocalization(options);
app.Run(context => app.Run(context =>
{ {
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
@ -268,23 +260,22 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
var options = new RequestLocalizationOptions() app.UseRequestLocalization(options =>
{ {
DefaultRequestCulture = new RequestCulture("en-US"), options.DefaultRequestCulture = new RequestCulture("en-US");
SupportedCultures = new List<CultureInfo> options.SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("FR") new CultureInfo("FR")
}, };
SupportedUICultures = new List<CultureInfo> options.SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("FR") new CultureInfo("FR")
} };
}; var provider = new QueryStringRequestCultureProvider();
var provider = new QueryStringRequestCultureProvider(); provider.QueryStringKey = "c";
provider.QueryStringKey = "c"; provider.UIQueryStringKey = "uic";
provider.UIQueryStringKey = "uic"; options.RequestCultureProviders.Insert(0, provider);
options.RequestCultureProviders.Insert(0, provider); });
app.UseRequestLocalization(options);
app.Run(context => app.Run(context =>
{ {
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();