Change MiddlewareFactory to type activate IMiddleware as a fallback (#988)
- This eases the transition and learning when you discover there's an interface for middleware.
This commit is contained in:
parent
2f109938d2
commit
44d5bf074f
|
|
@ -24,7 +24,7 @@ namespace Microsoft.AspNetCore.Http
|
|||
|
||||
public IMiddleware Create(Type middlewareType)
|
||||
{
|
||||
return _serviceProvider.GetRequiredService(middlewareType) as IMiddleware;
|
||||
return ActivatorUtilities.GetServiceOrCreateInstance(_serviceProvider, middlewareType) as IMiddleware;
|
||||
}
|
||||
|
||||
public void Release(IMiddleware middleware)
|
||||
|
|
|
|||
|
|
@ -232,6 +232,23 @@ namespace Microsoft.AspNetCore.Http
|
|||
Assert.Same(middlewareFactory.Created, middlewareFactory.Released);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task UseMiddlewareWithIMiddlewareAndMiddlewareFactoryTypeActivates()
|
||||
{
|
||||
var mockServiceProvider = new DummyServiceProvider();
|
||||
var builder = new ApplicationBuilder(mockServiceProvider);
|
||||
builder.UseMiddleware(typeof(Middleware));
|
||||
var app = builder.Build();
|
||||
var context = new DefaultHttpContext();
|
||||
var sp = new DummyServiceProvider();
|
||||
var middlewareFactory = new MiddlewareFactory(sp);
|
||||
sp.AddService(typeof(IMiddlewareFactory), middlewareFactory);
|
||||
context.RequestServices = sp;
|
||||
await app(context);
|
||||
Assert.True(Assert.IsType<bool>(context.Items["before"]));
|
||||
Assert.True(Assert.IsType<bool>(context.Items["after"]));
|
||||
}
|
||||
|
||||
public class Middleware : IMiddleware
|
||||
{
|
||||
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
|
||||
|
|
|
|||
Loading…
Reference in New Issue