To use hierarchical dependency injection in Angular and provide different instances of a service:
How It Works:
Angular creates new instances of a service if you provide it at a lower level (like component), overriding higher-level (e.g., root) instances.
Example:
Default service (singleton):
@Injectable({ providedIn: 'root' })
export class LoggerService {
log(msg: string) {
console.log(msg);
}
}
Override in a specific component:
@Component({
selector: 'app-child',
templateUrl: './child.component.html',
providers: [LoggerService] // New instance here
})
export class ChildComponent {
constructor(private logger: LoggerService) {
this.logger.log('Child logger instance');
}
}