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?