What is Dependency Injection?

Dependency Injection (DI) is a design pattern where an object receives the components it depends on from outside, rather than creating them inside itself.

Why DI?

Core Principles Behind DI

How to Implement DI (Constructor Injection example)

public interface IMessageSender
{
    void Send(string message);
}

public class EmailSender : IMessageSender
{
    public void Send(string message) => Console.WriteLine("Email sent: " + message);
}

public class NotificationService
{
    private readonly IMessageSender _messageSender;
    public NotificationService(IMessageSender messageSender)
    {
        _messageSender = messageSender;
    }
    public void Notify(string message) => _messageSender.Send(message);
}

class Program
{
    static void Main()
    {
        IMessageSender sender = new EmailSender();  // Create implementation outside
        var notifier = new NotificationService(sender); // Inject to consumer
        notifier.Notify("Dependency Injection is great!");
    }
}

Using DI Containers in .NET Framework 4.8

Common Use Cases of DI

Benefits vs. Drawbacks

Benefits Drawbacks
Clear separation of concerns More setup code initially
Easier testing and mocking Learning curve for DI concepts
Flexibility to change dependencies Small runtime overhead (usually negligible)