What are @Inject Decorators ?

@Inject is a decorator used to specify the token (dependency) to be injected into a class constructor or a provider definition. It specifies dependencies explicitly for Angular’s DI system when automatic resolution is not possible, helping to resolve dependencies based on the specified token.

Features of @Inject decorators

  • Decoupling: Enables dependencies and components to be coupled less tightly.
  • Parameter Injection: Injecting dependencies into constructors or methods without relying on TypeScript’s type inference.
  • Clearer Intent: Enhances readability by indicating which dependencies are being injected into a component or service.

Syntax:

export class MyComponent {
constructor(@Inject(ServiceClass) private myService: ServiceClass) {}
}


Now Create a new component:-

ng generate component gfgcomponent

Folder Structure:

A new component will be created in app folder

Example:

HTML
<!-- gfgcomponent.component.html -->

<p>{{greetingMessage}}</p>
JavaScript
// gfgcomponent.component.ts

import { Component, Inject } from '@angular/core';
import { GfgService } from '../gfg.service';

@Component({
    selector: 'app-gfgcomponent',
    templateUrl: './gfgcomponent.component.html',
    styleUrls: ['./gfgcomponent.component.css']
})
export class GfgcomponentComponent {
    constructor(@Inject(GfgService) private gfgService: GfgService) { }

    greetingMessage = "";

    ngOnInit() {
        this.greetingMessage = this.gfgService.greetUser("GFGUser")
    }
}
  • The GfgService is injected into the component using the @Inject decorator in the constructor.
  • Next, we can use greetUser() method from GfgService, and we save the resultant greeting message in the greetingMessage variable.
  • You can now access and see this welcome message in the HTML template of the component.

Output:

Output on browser

Difference between @Injectable and @Inject Decorators

In Angular, decorators play an important role in defining and managing dependencies within the application. Two commonly used decorators are @Injectable and @Inject. While they both relate to dependency injection, they serve different purposes and are applied to different elements within an Angular application.

Table of Content

  • What are @Injectable Decorators ?
  • What are @Inject Decorators ?
  • Difference between @Injectable and @Inject decorators
  • Conclusion

Similar Reads

What are @Injectable Decorators ?

@Injectable is a decorator in Angular used to mark a class as an injectable that allows it to be provided and injected as a dependency within other Angular components, services, or modules....

Steps to Create Angular Project

Step 1: Create a new Angular Project using the following command...

What are @Inject Decorators ?

@Inject is a decorator used to specify the token (dependency) to be injected into a class constructor or a provider definition. It specifies dependencies explicitly for Angular’s DI system when automatic resolution is not possible, helping to resolve dependencies based on the specified token....

Difference between @Injectable and @Inject decorators

Feature @Injectable Decorator @Inject Decorator Purpose Marks a class as eligible for dependency injection. Specifies a dependency token for manual injection. Usage Applied to service classes or providers. Applied to constructor parameters to specify injection dependencies. Dependency Scope Defines the metadata needed for DI resolution. Specifies the exact dependency to be injected. Dependency Type Marks a class as a candidate for DI resolution. Directs DI to inject a specific dependency instance. Example @Injectable({ providedIn: ‘root’ }) constructor(@Inject(MyDependency) private dependency: MyDependency)...

Conclusion

In summary, @Injectable is used to mark a class as injectable, that allows it to be managed by Angular’s dependency injection system, while @Inject is used to specify the token (dependency) to be injected into a class constructor or a provider definition. Understanding the difference between these decorators is important for effectively managing dependencies and implementing dependency injection in Angular applications....

Contact Us