Hierarchical Injectors
Explain how Angular's injector tree mirrors the component tree and how that affects instance sharing and overriding.
Angular doesn't have one single injector for the whole application — it has a tree of injectors that roughly mirrors the component tree, plus a root/platform-level injector at the top, and understanding this hierarchy is what separates a surface-level understanding of DI from a deep one. Every component (and every NgModule, in the older model) can optionally have its own injector by declaring providers in its metadata, creating a new node in that tree.
It's like a company's approval chain — a request goes to your immediate manager first, and only escalates to their boss if your manager can't approve it; a department that has its own approved budget for something never needs to escalate that particular request to headquarters at all.