One of the most powerful features in Angular is the dependency injection mechanism. You're just adding a provider inside your class constructor, and you getting the instance from Angular. Angular 9 introduced new way to register providers on any module level, and on the platform level. Let learn together how the DI works behind the scene. What are tree shakable providers and why we need new levels for registering them?