Hierarchical Dependency Injection (DI) in Angular is a powerful feature that allows you to control the scope and lifetime of services. It enables you to create a hierarchy of injectors, where each injector can provide its own set of dependencies. This hierarchy mirrors the component tree, allowing for fine-grained control over which services are available to which parts of your application.
How Hierarchical Dependency Injection Works?
In Angular, every component has its own injector, and these injectors form a hierarchy. The root injector is created when the application starts, and child injectors are created for each component. When a component requests a dependency, Angular starts at the component’s injector and works its way up the hierarchy until it finds a provider for the requested dependency.
Let’s look at an example to understand how hierarchical DIworks.
Step 1: Create a ServiceFirst, we’ll create a simple service.
import { Injectable } from '@angular/core';
@Injectable({
  providedIn: 'root',
})
export class LoggerService {
  log(message: string) {
    console.log(message);
  }
}
Next, we’ll create a parent component and a child component .
import { Component } from '@angular/core';
import { LoggerService } from './logger.service';
@Component({
  selector: 'app-parent',
  template: `
    <h1>Parent Component</h1>
    <app-child></app-child>
  `,
  providers: [LoggerService],
})
export class ParentComponent {
  constructor(private logger: LoggerService) {
    this.logger.log('Parent Component Initialized');
  }
}
@Component({
  selector: 'app-child',
  template: `<h2>Child Component</h2>`,
})
export class ChildComponent {
  constructor(private logger: LoggerService) {
    this.logger.log('Child Component Initialized');
  }
}
In this example, the ParentComponent provides the LoggerService. The ChildComponent does not provide the LoggerService, so it will use the instance provided by the ParentComponent.
Finally, we’ll register the components in a module.
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { ParentComponent } from './parent.component';
import { ChildComponent } from './child.component';
@NgModule({
  declarations: [AppComponent, ParentComponent, ChildComponent],
  imports: [BrowserModule],
  bootstrap: [AppComponent],
})
export class AppModule {}
Key Points
- Injector Hierarchy: Each component has its own injector, forming a hierarchy that mirrors the component tree.
 - Provider Scope: Providers can be registered at different levels (root, module, component), controlling the scope and lifetime of services.
 - Dependency Resolution: Angular starts at the component’s injector and works its way up the hierarchy to resolve dependencies.
 
Benefits of Hierarchical Dependency Injection
- Scoped Services: You can create services that are scoped to specific parts of your application, improving modularity and encapsulation.
 - Optimized Performance: By limiting the scope of services, you can reduce memory usage and improve performance.
 - Flexible Configuration: Different parts of your application can use different configurations of the same service.
 
Hierarchical DI is a powerful feature that allows you to build scalable and maintainable Angular applications by providing fine-grained control over service instances and their lifetimes.
Happy coding!! 😊

No comments:
Post a Comment