A software architect is designing a system where a `ReportGenerator` class needs access to customer data. Instead of allowing `ReportGenerator` to directly instantiate a `CustomerRepository` class, the architect mandates that `ReportGenerator` must depend on an `ICustomerRepository` interface. The concrete implementation will be provided at runtime. Which SOLID principle is primarily being applied?
-
A
Single Responsibility Principle
-
B
Open/Closed Principle
-
C
Liskov Substitution Principle
-
D
Dependency Inversion Principle