How to create a child scope from the parent with default dependency injection in .NET Core?

Use IServiceProvider.CreateScope() method to create a local scope:

var services = new ServiceCollection();
services.AddScoped<ExampleService>();
var globalProvider = services.BuildServiceProvider();

using (var scope = globalProvider.CreateScope())
{
    var localScoped = scope.ServiceProvider.GetService<ExampleService>();

    var globalScoped = globalProvider.GetService<ExampleService>();
}

It can be easily tested:

using (var scope = globalProvider.CreateScope())
{
    var localScopedV1 = scope.ServiceProvider.GetService<ExampleService>();
    var localScopedV2 = scope.ServiceProvider.GetService<ExampleService>();
    Assert.Equal(localScopedV1, localScopedV2);

    var globalScoped = globalProvider.GetService<ExampleService>();
    Assert.NotEqual(localScopedV1, globalScoped);
    Assert.NotEqual(localScopedV2, globalScoped);
}

Documentation: Service Lifetimes and Registration Options.

Reference Microsoft.Extensions.DependencyInjection
or just Microsoft.AspNetCore.All
package to use the code above.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)