Junior — Middle
Can you give an example of implementing the dependency inversion principle in programming practice?
sobes.tech AI
Answer from AI
The Dependency Inversion Principle states that high-level modules should not depend on low-level modules, but both should depend on abstractions (interfaces or abstract classes).
Example in C#:
// Abstraction
public interface IMessageSender
{
void Send(string message);
}
// Low-level implementation
public class EmailSender : IMessageSender
{
public void Send(string message)
{
Console.WriteLine($"Sending email: {message}");
}
}
// High-level module
public class NotificationService
{
private readonly IMessageSender _messageSender;
public NotificationService(IMessageSender messageSender)
{
_messageSender = messageSender;
}
public void Notify(string message)
{
_messageSender.Send(message);
}
}
// Usage
var emailSender = new EmailSender();
var notificationService = new NotificationService(emailSender);
notificationService.Notify("Hello!");
Thus, NotificationService depends on the abstraction IMessageSender, not on the concrete implementation EmailSender, which makes replacing the implementation and testing easier.