Configure IStartupFilters in FIFO order #653
This commit is contained in:
parent
32740d67a7
commit
ac7741fe81
|
|
@ -162,7 +162,7 @@ namespace Microsoft.AspNetCore.Hosting.Internal
|
|||
|
||||
var startupFilters = _applicationServices.GetService<IEnumerable<IStartupFilter>>();
|
||||
var configure = Startup.ConfigureDelegate;
|
||||
foreach (var filter in startupFilters)
|
||||
foreach (var filter in startupFilters.Reverse())
|
||||
{
|
||||
configure = filter.Configure(configure);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -250,6 +250,53 @@ namespace Microsoft.AspNetCore.Hosting
|
|||
Assert.NotNull(host.Services.GetRequiredService<IOptions<object>>());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ConfiguresStartupFiltersInCorrectOrder()
|
||||
{
|
||||
// Verify ordering
|
||||
var configureOrder = 0;
|
||||
var host = CreateBuilder()
|
||||
.UseServer((IServerFactory)this)
|
||||
.ConfigureServices(services =>
|
||||
{
|
||||
services.AddTransient<IStartupFilter>(serviceProvider => new TestFilter(
|
||||
() => Assert.Equal(1, configureOrder++),
|
||||
() => Assert.Equal(2, configureOrder++),
|
||||
() => Assert.Equal(5, configureOrder++)));
|
||||
services.AddTransient<IStartupFilter>(serviceProvider => new TestFilter(
|
||||
() => Assert.Equal(0, configureOrder++),
|
||||
() => Assert.Equal(3, configureOrder++),
|
||||
() => Assert.Equal(4, configureOrder++)));
|
||||
})
|
||||
.Build();
|
||||
Assert.Equal(6, configureOrder);
|
||||
}
|
||||
|
||||
private class TestFilter : IStartupFilter
|
||||
{
|
||||
private readonly Action _verifyConfigureOrder;
|
||||
private readonly Action _verifyBuildBeforeOrder;
|
||||
private readonly Action _verifyBuildAfterOrder;
|
||||
|
||||
public TestFilter(Action verifyConfigureOrder, Action verifyBuildBeforeOrder, Action verifyBuildAfterOrder)
|
||||
{
|
||||
_verifyConfigureOrder = verifyConfigureOrder;
|
||||
_verifyBuildBeforeOrder = verifyBuildBeforeOrder;
|
||||
_verifyBuildAfterOrder = verifyBuildAfterOrder;
|
||||
}
|
||||
|
||||
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
|
||||
{
|
||||
_verifyConfigureOrder();
|
||||
return builder =>
|
||||
{
|
||||
_verifyBuildBeforeOrder();
|
||||
next(builder);
|
||||
_verifyBuildAfterOrder();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EnvDefaultsToProductionIfNoConfig()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -275,7 +275,7 @@ namespace Microsoft.AspNetCore.TestHost
|
|||
{
|
||||
app.Run(context =>
|
||||
{
|
||||
Assert.NotNull(context.RequestServices);
|
||||
Assert.Null(context.RequestServices);
|
||||
return context.Response.WriteAsync("Success");
|
||||
});
|
||||
})
|
||||
|
|
|
|||
Loading…
Reference in New Issue