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;
public DefaultInlineConstraintResolver(IServiceProvider serviceProvider,
IOptionsAccessor<RouteOptions> routeOptions)
IOptions<RouteOptions> routeOptions)
{
_serviceProvider = serviceProvider;
_inlineConstraintMap = routeOptions.Options.ConstraintMap;

View File

@ -3,6 +3,7 @@
using System.Threading.Tasks;
using Microsoft.AspNet.Http;
using Microsoft.AspNet.RequestContainer;
using Microsoft.AspNet.Routing;
using Microsoft.AspNet.Routing.Logging;
using Microsoft.Framework.DependencyInjection;
@ -34,22 +35,25 @@ namespace Microsoft.AspNet.Builder
public async Task Invoke(HttpContext httpContext)
{
EnsureLogger(httpContext);
using (_logger.BeginScope("RouterMiddleware.Invoke"))
using (RequestServicesContainer.EnsureRequestServices(httpContext))
{
var context = new RouteContext(httpContext);
context.RouteData.Routers.Add(Router);
await Router.RouteAsync(context);
if (_logger.IsEnabled(TraceType.Information))
EnsureLogger(httpContext);
using (_logger.BeginScope("RouterMiddleware.Invoke"))
{
_logger.WriteValues(new RouterMiddlewareInvokeValues() { Handled = context.IsHandled });
}
var context = new RouteContext(httpContext);
context.RouteData.Routers.Add(Router);
if (!context.IsHandled)
{
await Next.Invoke(httpContext);
await Router.RouteAsync(context);
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)
{
var optionsAccessor = new Mock<IOptionsAccessor<RouteOptions>>();
var optionsAccessor = new Mock<IOptions<RouteOptions>>();
optionsAccessor.SetupGet(o => o.Options).Returns(routeOptions);
var serviceProvider = new Mock<IServiceProvider>();
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()
{
var services = new ServiceCollection { OptionsServices.GetDefaultServices() };
services.ConfigureOptions<RouteOptions>(options =>
services.Configure<RouteOptions>(options =>
options
.ConstraintMap
.Add("test", typeof(TestRouteConstraint)));
var serviceProvider = services.BuildServiceProvider();
var accessor = serviceProvider.GetService<IOptionsAccessor<RouteOptions>>();
var accessor = serviceProvider.GetService<IOptions<RouteOptions>>();
return new DefaultInlineConstraintResolver(serviceProvider, accessor);
}

View File

@ -1055,7 +1055,7 @@ namespace Microsoft.AspNet.Routing.Template.Tests
{
var services = new ServiceCollection { OptionsServices.GetDefaultServices() };
var serviceProvider = services.BuildServiceProvider();
var accessor = serviceProvider.GetService<IOptionsAccessor<RouteOptions>>();
var accessor = serviceProvider.GetService<IOptions<RouteOptions>>();
return new DefaultInlineConstraintResolver(serviceProvider, accessor);
}

View File

@ -823,7 +823,7 @@ namespace Microsoft.AspNet.Routing.Template.Tests
{
var services = new ServiceCollection { OptionsServices.GetDefaultServices() };
var serviceProvider = services.BuildServiceProvider();
var accessor = serviceProvider.GetService<IOptionsAccessor<RouteOptions>>();
var accessor = serviceProvider.GetService<IOptions<RouteOptions>>();
return new DefaultInlineConstraintResolver(serviceProvider, accessor);
}
}

View File

@ -481,7 +481,7 @@ namespace Microsoft.AspNet.Routing.Template.Tests
{
var services = new ServiceCollection { OptionsServices.GetDefaultServices() };
var serviceProvider = services.BuildServiceProvider();
var accessor = serviceProvider.GetService<IOptionsAccessor<RouteOptions>>();
var accessor = serviceProvider.GetService<IOptions<RouteOptions>>();
return new DefaultInlineConstraintResolver(serviceProvider, accessor);
}

View File

@ -110,7 +110,7 @@ namespace Microsoft.AspNet.Routing.Tests
{
var services = new ServiceCollection { OptionsServices.GetDefaultServices() };
var serviceProvider = services.BuildServiceProvider();
var accessor = serviceProvider.GetService<IOptionsAccessor<RouteOptions>>();
var accessor = serviceProvider.GetService<IOptions<RouteOptions>>();
return new DefaultInlineConstraintResolver(serviceProvider, accessor);
}
}