Why it matters
runtime activation fails when DI tries to create the service.
Planning to build a kite without string means the build fails when you start.
DI015
registered services with direct or transitive constructor/factory dependencies that are not registered (including keyed and open-generic paths).
Why it matters
runtime activation fails when DI tries to create the service.
Planning to build a kite without string means the build fails when you start.
Install
dotnet add package DependencyInjection.Lifetime.Analyzers --version 2.2.2
README problem example
public interface IMissingDependency { }
public interface IMyService { }
public sealed class MyService : IMyService
{
public MyService(IMissingDependency missing) { }
}
services.AddSingleton<IMyService, MyService>();
README better pattern
public sealed class MissingDependency : IMissingDependency { }
services.AddScoped<IMissingDependency, MissingDependency>();
services.AddSingleton<IMyService, MyService>();
Repo sample extraction
Sample app warning case
public class BadUnresolvableService
{
public BadUnresolvableService(IMissingDependency missing) { }
}
Sample app safe pattern
public class GoodResolvableService
{
public GoodResolvableService(IRegisteredDependency dependency) { }
}
Related guides
More documentation