Can you explain DIP with an example in C#?
❌ Without DIP (Tightly Coupled):
public class FileLogger
public void Log(string message) => Console.WriteLine("File log:
" + message);
public class OrderService
private readonly FileLogger _logger = new FileLogger();
public void ProcessOrder()
// Logic
_logger.Log("Order processed.");
- OrderService is tightly coupled to FileLogger.
✅ With DIP (Loosely Coupled via Abstraction):
public interface ILogger
void Log(string message);
public class FileLogger : ILogger
public void Log(string message) => Console.WriteLine("File log:
" + message);
public class OrderService
private readonly ILogger _logger;
public OrderService(ILogger logger)
_logger = logger;
public void ProcessOrder()
// Logic
_logger.Log("Order processed.");
Now OrderService depends on the abstraction (ILogger), not the concrete
FileLogger. You can easily substitute with DatabaseLogger, ConsoleLogger, or a
mock in tests.