Why it matters
singleton disposables at root scope may never be cleaned up.
Locking the front door but leaving all the taps running still wastes the whole house.
DI014
root providers from `BuildServiceProvider()` that are never disposed.
Why it matters
singleton disposables at root scope may never be cleaned up.
Locking the front door but leaving all the taps running still wastes the whole house.
Install
dotnet add package DependencyInjection.Lifetime.Analyzers --version 2.2.2
README problem example
var services = new ServiceCollection();
var provider = services.BuildServiceProvider();
var service = provider.GetRequiredService<IMyService>();
README better pattern
using var provider = services.BuildServiceProvider();
var service = provider.GetRequiredService<IMyService>();
Repo sample extraction
Sample app warning case
public void BadExample()
{
var services = new ServiceCollection();
// ⚠️ BAD: Root provider is not disposed
// Disposable singletons will not be disposed
var provider = services.BuildServiceProvider();
var service = provider.GetService<IServiceScopeFactory>();
}
Sample app safe pattern
public void GoodExample()
{
var services = new ServiceCollection();
// ✅ GOOD: Provider disposed via 'using'
using var provider = services.BuildServiceProvider();
var service = provider.GetService<IServiceScopeFactory>();
}
Related guides
More documentation