React to options and hosting changes
Uses EnsureRequestServices to force RequestServices to be created
This commit is contained in:
parent
3b19de0e42
commit
86dcbfd0d1
|
|
@ -22,7 +22,7 @@ namespace Microsoft.AspNet.Routing
|
||||||
private readonly IServiceProvider _serviceProvider;
|
private readonly IServiceProvider _serviceProvider;
|
||||||
|
|
||||||
public DefaultInlineConstraintResolver(IServiceProvider serviceProvider,
|
public DefaultInlineConstraintResolver(IServiceProvider serviceProvider,
|
||||||
IOptionsAccessor<RouteOptions> routeOptions)
|
IOptions<RouteOptions> routeOptions)
|
||||||
{
|
{
|
||||||
_serviceProvider = serviceProvider;
|
_serviceProvider = serviceProvider;
|
||||||
_inlineConstraintMap = routeOptions.Options.ConstraintMap;
|
_inlineConstraintMap = routeOptions.Options.ConstraintMap;
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNet.Http;
|
using Microsoft.AspNet.Http;
|
||||||
|
using Microsoft.AspNet.RequestContainer;
|
||||||
using Microsoft.AspNet.Routing;
|
using Microsoft.AspNet.Routing;
|
||||||
using Microsoft.AspNet.Routing.Logging;
|
using Microsoft.AspNet.Routing.Logging;
|
||||||
using Microsoft.Framework.DependencyInjection;
|
using Microsoft.Framework.DependencyInjection;
|
||||||
|
|
@ -34,22 +35,25 @@ namespace Microsoft.AspNet.Builder
|
||||||
|
|
||||||
public async Task Invoke(HttpContext httpContext)
|
public async Task Invoke(HttpContext httpContext)
|
||||||
{
|
{
|
||||||
EnsureLogger(httpContext);
|
using (RequestServicesContainer.EnsureRequestServices(httpContext))
|
||||||
using (_logger.BeginScope("RouterMiddleware.Invoke"))
|
|
||||||
{
|
{
|
||||||
var context = new RouteContext(httpContext);
|
EnsureLogger(httpContext);
|
||||||
context.RouteData.Routers.Add(Router);
|
using (_logger.BeginScope("RouterMiddleware.Invoke"))
|
||||||
|
|
||||||
await Router.RouteAsync(context);
|
|
||||||
|
|
||||||
if (_logger.IsEnabled(TraceType.Information))
|
|
||||||
{
|
{
|
||||||
_logger.WriteValues(new RouterMiddlewareInvokeValues() { Handled = context.IsHandled });
|
var context = new RouteContext(httpContext);
|
||||||
}
|
context.RouteData.Routers.Add(Router);
|
||||||
|
|
||||||
if (!context.IsHandled)
|
await Router.RouteAsync(context);
|
||||||
{
|
|
||||||
await Next.Invoke(httpContext);
|
if (_logger.IsEnabled(TraceType.Information))
|
||||||
|
{
|
||||||
|
_logger.WriteValues(new RouterMiddlewareInvokeValues() { Handled = context.IsHandled });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!context.IsHandled)
|
||||||
|
{
|
||||||
|
await Next.Invoke(httpContext);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -300,7 +300,7 @@ namespace Microsoft.AspNet.Routing.Tests
|
||||||
|
|
||||||
private IInlineConstraintResolver GetInlineConstraintResolver(RouteOptions routeOptions)
|
private IInlineConstraintResolver GetInlineConstraintResolver(RouteOptions routeOptions)
|
||||||
{
|
{
|
||||||
var optionsAccessor = new Mock<IOptionsAccessor<RouteOptions>>();
|
var optionsAccessor = new Mock<IOptions<RouteOptions>>();
|
||||||
optionsAccessor.SetupGet(o => o.Options).Returns(routeOptions);
|
optionsAccessor.SetupGet(o => o.Options).Returns(routeOptions);
|
||||||
var serviceProvider = new Mock<IServiceProvider>();
|
var serviceProvider = new Mock<IServiceProvider>();
|
||||||
serviceProvider.Setup(o => o.GetService(It.Is<Type>(type => type == typeof(ITypeActivator))))
|
serviceProvider.Setup(o => o.GetService(It.Is<Type>(type => type == typeof(ITypeActivator))))
|
||||||
|
|
|
||||||
|
|
@ -296,12 +296,12 @@ namespace Microsoft.AspNet.Routing.Tests
|
||||||
private static IInlineConstraintResolver GetConstraintResolver()
|
private static IInlineConstraintResolver GetConstraintResolver()
|
||||||
{
|
{
|
||||||
var services = new ServiceCollection { OptionsServices.GetDefaultServices() };
|
var services = new ServiceCollection { OptionsServices.GetDefaultServices() };
|
||||||
services.ConfigureOptions<RouteOptions>(options =>
|
services.Configure<RouteOptions>(options =>
|
||||||
options
|
options
|
||||||
.ConstraintMap
|
.ConstraintMap
|
||||||
.Add("test", typeof(TestRouteConstraint)));
|
.Add("test", typeof(TestRouteConstraint)));
|
||||||
var serviceProvider = services.BuildServiceProvider();
|
var serviceProvider = services.BuildServiceProvider();
|
||||||
var accessor = serviceProvider.GetService<IOptionsAccessor<RouteOptions>>();
|
var accessor = serviceProvider.GetService<IOptions<RouteOptions>>();
|
||||||
return new DefaultInlineConstraintResolver(serviceProvider, accessor);
|
return new DefaultInlineConstraintResolver(serviceProvider, accessor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1055,7 +1055,7 @@ namespace Microsoft.AspNet.Routing.Template.Tests
|
||||||
{
|
{
|
||||||
var services = new ServiceCollection { OptionsServices.GetDefaultServices() };
|
var services = new ServiceCollection { OptionsServices.GetDefaultServices() };
|
||||||
var serviceProvider = services.BuildServiceProvider();
|
var serviceProvider = services.BuildServiceProvider();
|
||||||
var accessor = serviceProvider.GetService<IOptionsAccessor<RouteOptions>>();
|
var accessor = serviceProvider.GetService<IOptions<RouteOptions>>();
|
||||||
return new DefaultInlineConstraintResolver(serviceProvider, accessor);
|
return new DefaultInlineConstraintResolver(serviceProvider, accessor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -823,7 +823,7 @@ namespace Microsoft.AspNet.Routing.Template.Tests
|
||||||
{
|
{
|
||||||
var services = new ServiceCollection { OptionsServices.GetDefaultServices() };
|
var services = new ServiceCollection { OptionsServices.GetDefaultServices() };
|
||||||
var serviceProvider = services.BuildServiceProvider();
|
var serviceProvider = services.BuildServiceProvider();
|
||||||
var accessor = serviceProvider.GetService<IOptionsAccessor<RouteOptions>>();
|
var accessor = serviceProvider.GetService<IOptions<RouteOptions>>();
|
||||||
return new DefaultInlineConstraintResolver(serviceProvider, accessor);
|
return new DefaultInlineConstraintResolver(serviceProvider, accessor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -481,7 +481,7 @@ namespace Microsoft.AspNet.Routing.Template.Tests
|
||||||
{
|
{
|
||||||
var services = new ServiceCollection { OptionsServices.GetDefaultServices() };
|
var services = new ServiceCollection { OptionsServices.GetDefaultServices() };
|
||||||
var serviceProvider = services.BuildServiceProvider();
|
var serviceProvider = services.BuildServiceProvider();
|
||||||
var accessor = serviceProvider.GetService<IOptionsAccessor<RouteOptions>>();
|
var accessor = serviceProvider.GetService<IOptions<RouteOptions>>();
|
||||||
return new DefaultInlineConstraintResolver(serviceProvider, accessor);
|
return new DefaultInlineConstraintResolver(serviceProvider, accessor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -110,7 +110,7 @@ namespace Microsoft.AspNet.Routing.Tests
|
||||||
{
|
{
|
||||||
var services = new ServiceCollection { OptionsServices.GetDefaultServices() };
|
var services = new ServiceCollection { OptionsServices.GetDefaultServices() };
|
||||||
var serviceProvider = services.BuildServiceProvider();
|
var serviceProvider = services.BuildServiceProvider();
|
||||||
var accessor = serviceProvider.GetService<IOptionsAccessor<RouteOptions>>();
|
var accessor = serviceProvider.GetService<IOptions<RouteOptions>>();
|
||||||
return new DefaultInlineConstraintResolver(serviceProvider, accessor);
|
return new DefaultInlineConstraintResolver(serviceProvider, accessor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue