public IServiceProvider CreateServiceProvider(IServiceCollection containerBuilder)
            {
                var provider = new AsyncDisposableServiceProvider(containerBuilder.BuildServiceProvider());

                Providers.Add(provider);
                return(provider);
            }
Exemplo n.º 2
0
    public async Task RequestServicesAreDisposedAsynOnCompleted()
    {
        var serviceProvider = new AsyncDisposableServiceProvider(new ServiceCollection()
                                                                 .AddTransient <DisposableThing>()
                                                                 .BuildServiceProvider());

        var             scopeFactory = serviceProvider.GetRequiredService <IServiceScopeFactory>();
        DisposableThing instance     = null;

        var context = new DefaultHttpContext();

        context.ServiceScopeFactory = scopeFactory;
        var responseFeature = new TestHttpResponseFeature();

        context.Features.Set <IHttpResponseFeature>(responseFeature);

        Assert.NotNull(context.RequestServices);
        Assert.Single(responseFeature.CompletedCallbacks);

        instance = context.RequestServices.GetRequiredService <DisposableThing>();

        var callback = responseFeature.CompletedCallbacks[0];
        await callback.callback(callback.state);

        Assert.Null(context.RequestServices);
        Assert.True(instance.Disposed);
        var scope = Assert.Single(serviceProvider.Scopes);

        Assert.True(scope.DisposeAsyncCalled);
        Assert.False(scope.DisposeCalled);
    }