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)
|
public IMiddleware Create(Type middlewareType)
|
||||||
{
|
{
|
||||||
return _serviceProvider.GetRequiredService(middlewareType) as IMiddleware;
|
return ActivatorUtilities.GetServiceOrCreateInstance(_serviceProvider, middlewareType) as IMiddleware;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Release(IMiddleware middleware)
|
public void Release(IMiddleware middleware)
|
||||||
|
|
|
||||||
|
|
@ -232,6 +232,23 @@ namespace Microsoft.AspNetCore.Http
|
||||||
Assert.Same(middlewareFactory.Created, middlewareFactory.Released);
|
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 class Middleware : IMiddleware
|
||||||
{
|
{
|
||||||
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
|
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue