3.1 How does dependency injection work?3.1.1 Why do we need DI?3.1.2 Let’s build a primitive DI mechanism3.1.3 Dependency injection the Angular way3.1.4 Injection contexts3.2 The inject function3.2.1 Another way of injecting dependencies3.2.2 Injecting dependencies outside classes3.2.3 Why we should always use inject3.2.4 What about the drawbacks?3.3 Functional guards, resolvers, and interceptors3.3.1 Building an AuthGuard3.3.2 Building an EmployeeResolver3.3.3 Adding tokens to HTTP requests3.3.4 Migrating to functional guards/resolvers/interceptors3.4 DI deep dive3.4.1 DI lookup and how to modify it3.4.2 Truncating text with DI3.5 Exercises for the readerSummary