React to options and hosting changes

Uses EnsureRequestServices to force RequestServices to be created
This commit is contained in:
Hao Kung 2014-10-14 19:09:15 -07:00
parent 3b19de0e42
commit 86dcbfd0d1
8 changed files with 25 additions and 21 deletions

View File

@ -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;

View File

@ -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);
}
} }
} }
} }

View File

@ -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))))

View File

@ -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);
} }

View File

@ -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);
} }

View File

@ -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);
} }
} }

View File

@ -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);
} }

View File

@ -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);
} }
} }