For Yii3 we have been working to split the framework up into different parts that can be used separately. One of the parts I've been working on a lot is the DI implementation. Traditionally Yii uses arrays for configuration, often these arrays are defined in multiple files and recursively merged to obtain the final configuration. The goal of this DI implementation is to use DI containers to configure different parts of an application differently.
One of the first things they tell you about DI is that if you're injecting a container you're doing it wrong. While this is a good rule to live by, exceptions exist. Specifically parts of your application that decide the execution path will often use a DI container as a service locator to instantiate the request handler and inject its dependencies.
In Yii this routing happens in modules. A module parses a request and routes it to an action. This action has dependencies which are injected by the