React to EnsureRoutingServices fix

This commit is contained in:
Hao Kung 2014-10-14 21:03:16 -07:00
parent 86dcbfd0d1
commit 30a4ee1ce1
3 changed files with 21 additions and 7 deletions

View File

@ -9,7 +9,7 @@ namespace Microsoft.AspNet.Builder
{ {
public static IApplicationBuilder UseRouter([NotNull] this IApplicationBuilder builder, [NotNull] IRouter router) public static IApplicationBuilder UseRouter([NotNull] this IApplicationBuilder builder, [NotNull] IRouter router)
{ {
return builder.Use((next) => new RouterMiddleware(next, router).Invoke); return builder.UseMiddleware<RouterMiddleware>(router);
} }
} }
} }

View File

@ -8,6 +8,7 @@ using Microsoft.AspNet.Routing;
using Microsoft.AspNet.Routing.Logging; using Microsoft.AspNet.Routing.Logging;
using Microsoft.Framework.DependencyInjection; using Microsoft.Framework.DependencyInjection;
using Microsoft.Framework.Logging; using Microsoft.Framework.Logging;
using System;
namespace Microsoft.AspNet.Builder namespace Microsoft.AspNet.Builder
{ {
@ -15,10 +16,11 @@ namespace Microsoft.AspNet.Builder
{ {
private ILogger _logger; private ILogger _logger;
public RouterMiddleware(RequestDelegate next, IRouter router) public RouterMiddleware(RequestDelegate next, IServiceProvider services, IRouter router)
{ {
Next = next; Next = next;
Router = router; Router = router;
Services = services;
} }
private IRouter Router private IRouter Router
@ -33,9 +35,15 @@ namespace Microsoft.AspNet.Builder
set; set;
} }
private IServiceProvider Services
{
get;
set;
}
public async Task Invoke(HttpContext httpContext) public async Task Invoke(HttpContext httpContext)
{ {
using (RequestServicesContainer.EnsureRequestServices(httpContext)) using (RequestServicesContainer.EnsureRequestServices(httpContext, Services))
{ {
EnsureLogger(httpContext); EnsureLogger(httpContext);
using (_logger.BeginScope("RouterMiddleware.Invoke")) using (_logger.BeginScope("RouterMiddleware.Invoke"))

View File

@ -10,6 +10,7 @@ using Microsoft.Framework.Logging;
using Moq; using Moq;
#endif #endif
using Xunit; using Xunit;
using System;
namespace Microsoft.AspNet.Routing namespace Microsoft.AspNet.Routing
{ {
@ -31,13 +32,15 @@ namespace Microsoft.AspNet.Routing
mockContext.Setup(m => m.RequestServices.GetService(typeof(ILoggerFactory))) mockContext.Setup(m => m.RequestServices.GetService(typeof(ILoggerFactory)))
.Returns(loggerFactory); .Returns(loggerFactory);
var mockServiceProvider = new Mock<IServiceProvider>();
RequestDelegate next = (c) => RequestDelegate next = (c) =>
{ {
return Task.FromResult<object>(null); return Task.FromResult<object>(null);
}; };
var router = new TestRouter(isHandled); var router = new TestRouter(isHandled);
var middleware = new RouterMiddleware(next, router); var middleware = new RouterMiddleware(next, mockServiceProvider.Object, router);
// Act // Act
await middleware.Invoke(mockContext.Object); await middleware.Invoke(mockContext.Object);
@ -79,7 +82,8 @@ namespace Microsoft.AspNet.Routing
}; };
var router = new TestRouter(isHandled); var router = new TestRouter(isHandled);
var middleware = new RouterMiddleware(next, router); var mockServiceProvider = new Mock<IServiceProvider>();
var middleware = new RouterMiddleware(next, mockServiceProvider.Object, router);
// Act // Act
await middleware.Invoke(mockContext.Object); await middleware.Invoke(mockContext.Object);
@ -114,7 +118,8 @@ namespace Microsoft.AspNet.Routing
}; };
var router = new TestRouter(isHandled); var router = new TestRouter(isHandled);
var middleware = new RouterMiddleware(next, router); var mockServiceProvider = new Mock<IServiceProvider>();
var middleware = new RouterMiddleware(next, mockServiceProvider.Object, router);
// Act // Act
await middleware.Invoke(mockContext.Object); await middleware.Invoke(mockContext.Object);
@ -158,7 +163,8 @@ namespace Microsoft.AspNet.Routing
}; };
var router = new TestRouter(isHandled); var router = new TestRouter(isHandled);
var middleware = new RouterMiddleware(next, router); var mockServiceProvider = new Mock<IServiceProvider>();
var middleware = new RouterMiddleware(next, mockServiceProvider.Object, router);
// Act // Act
await middleware.Invoke(mockContext.Object); await middleware.Invoke(mockContext.Object);