.NET › Dependency Injection
What is dependency injection, and how does ASP.NET Core's built-in DI container support it?
BeginnerAnswer
Dependency injection is a design pattern where a class receives its dependencies (other objects it needs to function) from an external source rather than creating them itself, promoting loose coupling and testability. ASP.NET Core includes a built-in DI container (IServiceProvider) where you register service implementations against interfaces at startup, and the framework automatically resolves and injects the correct implementation wherever a constructor requests that interface.
public interface IEmailSender { Task SendAsync(string to, string body); }
public class SmtpEmailSender : IEmailSender { ... }
builder.Services.AddScoped<IEmailSender, SmtpEmailSender>();
public class OrderService {
private readonly IEmailSender _emailSender;
public OrderService(IEmailSender emailSender) => _emailSender = emailSender; // auto-injected
}Real-world example A checkout service depends on IEmailSender rather than a concrete SmtpEmailSender, letting unit tests inject a fake implementation and letting the real application swap SMTP providers without changing OrderService's code at all.