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,7 +51,6 @@ 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.
@ -60,8 +59,7 @@ namespace LocalizationSample
//{ //{
//})); //}));
});
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>()
{
new CultureInfo("fr-FR")
}
}; };
options.SupportedUICultures = new List<CultureInfo>()
app.UseRequestLocalization(options); {
new CultureInfo("fr-FR")
};
});
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>()
{
new CultureInfo("fr-FR")
}
}; };
options.SupportedUICultures = new List<CultureInfo>()
app.UseRequestLocalization(options); {
new CultureInfo("fr-FR")
};
});
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>
{
new CultureInfo("ar-YE")
}
}; };
app.UseRequestLocalization(options); options.SupportedUICultures = new List<CultureInfo>
{
new CultureInfo("ar-YE")
};
});
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,17 +23,16 @@ 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 =>
{ {
@ -41,7 +40,7 @@ namespace Microsoft.Extensions.Localization.Tests
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>
{
new CultureInfo("ar-SA")
}
}; };
app.UseRequestLocalization(options); options.SupportedUICultures = new List<CultureInfo>
{
new CultureInfo("ar-SA")
};
});
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>
{
new CultureInfo("ar-SA")
}
}; };
app.UseRequestLocalization(options); options.SupportedUICultures = new List<CultureInfo>
{
new CultureInfo("ar-SA")
};
});
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>
{
new CultureInfo("ar-SA")
}
}; };
app.UseRequestLocalization(options); options.SupportedUICultures = new List<CultureInfo>
{
new CultureInfo("ar-SA")
};
});
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>
{
new CultureInfo("ar-SA")
}
}; };
app.UseRequestLocalization(options); options.SupportedUICultures = new List<CultureInfo>
{
new CultureInfo("ar-SA")
};
});
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>();