Why it matters
Leads to runtime disposal errors and brittle service behaviour.
It is like trying to turn on a torch after you removed the batteries.
DI004
Using a service after the scope that produced it has already ended, including scoped collections from GetServices<T>() enumerated after disposal, explicit Dispose() / DisposeAsync() (including scope?.Dispose() for scope locals), wrapped use receivers such as service!.DoWork() and ((IService)service).DoWork(), services resolved from a predeclared scope variable later disposed via using (scope), and the same patterns inside constructors, accessors, local functions, lambdas, and anonymous methods. Uses in branches mutually exclusive with the disposal — whether the dispose is explicit or a using statement/declaration — stay quiet, and out arguments are writes rather than uses (the rewritten local is fresh afterwards), while ref arguments still report.
Why it matters
Leads to runtime disposal errors and brittle service behaviour.
It is like trying to turn on a torch after you removed the batteries.
Install
dotnet add package DependencyInjection.Lifetime.Analyzers --version 3.7.8
README problem example
IMyService service;
using (var scope = _scopeFactory.CreateScope())
{
service = scope.ServiceProvider.GetRequiredService<IMyService>();
}
service.DoWork();
README better pattern
using (var scope = _scopeFactory.CreateScope())
{
var service = scope.ServiceProvider.GetRequiredService<IMyService>();
service.DoWork();
}
Repo sample extraction
Sample app warning case
public void Bad_UseAfterDispose()
{
IScopedService service;
using (var scope = _scopeFactory.CreateScope())
{
service = scope.ServiceProvider.GetRequiredService<IScopedService>();
}
// DI004: Service 'service' may be used after its scope is disposed
service.DoWork();
}
Sample app safe pattern
public void Good_UsedWithinScope()
{
using (var scope = _scopeFactory.CreateScope())
{
var service = scope.ServiceProvider.GetRequiredService<IScopedService>();
service.DoWork(); // Within scope - OK
}
}
Related guides
More documentation
Nearby diagnostics