DI004

Service Used After Scope Disposed

using a service after the scope that produced it has already ended.

Default severity: Warning · Code fix: No

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.

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();
}

No. Usually needs manual refactor.

Repo sample extraction

Examples pulled from the sample app

Open full sample file

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
        }
    }