This is the archived documentation for Angular v6. Please visit angular.io to see documentation for the current version of Angular.

ClassProvider

Configures the Injector to return an instance of useClass for a token.

See more...

      
      interface ClassProvider extends ClassSansProvider {
  provide: any
  multi?: boolean
}
    

Description

For more details, see the "Dependency Injection Guide".

Properties

Property Description
provide: any

An injection token. (Typically an instance of Type or InjectionToken, but can be any).

multi?: boolean

If true, then injector returns an array of instances. This is useful to allow multiple providers spread across many files to provide configuration information to a common token.

Usage notes

Example

abstract class Shape { // TODO(issue/24571): remove '!'. name !: string; } class Square extends Shape { name = 'square'; } const injector = ReflectiveInjector.resolveAndCreate([{provide: Shape, useClass: Square}]); const shape: Shape = injector.get(Shape); expect(shape.name).toEqual('square'); expect(shape instanceof Square).toBe(true);
      
      
  1. abstract class Shape { // TODO(issue/24571): remove '!'.
  2. name !: string;
  3. }
  4.  
  5. class Square extends Shape {
  6. name = 'square';
  7. }
  8.  
  9. const injector = ReflectiveInjector.resolveAndCreate([{provide: Shape, useClass: Square}]);
  10.  
  11. const shape: Shape = injector.get(Shape);
  12. expect(shape.name).toEqual('square');
  13. expect(shape instanceof Square).toBe(true);

Note that following two providers are not equal:

class Greeting { salutation = 'Hello'; } class FormalGreeting extends Greeting { salutation = 'Greetings'; } const injector = ReflectiveInjector.resolveAndCreate( [FormalGreeting, {provide: Greeting, useClass: FormalGreeting}]); // The injector returns different instances. // See: {provide: ?, useExisting: ?} if you want the same instance. expect(injector.get(FormalGreeting)).not.toBe(injector.get(Greeting));
      
      
  1. class Greeting {
  2. salutation = 'Hello';
  3. }
  4.  
  5. class FormalGreeting extends Greeting {
  6. salutation = 'Greetings';
  7. }
  8.  
  9. const injector = ReflectiveInjector.resolveAndCreate(
  10. [FormalGreeting, {provide: Greeting, useClass: FormalGreeting}]);
  11.  
  12. // The injector returns different instances.
  13. // See: {provide: ?, useExisting: ?} if you want the same instance.
  14. expect(injector.get(FormalGreeting)).not.toBe(injector.get(Greeting));

Multi-value example

const locale = new InjectionToken<string[]>('locale'); const injector = Injector.create([ {provide: locale, multi: true, useValue: 'en'}, {provide: locale, multi: true, useValue: 'sk'}, ]); const locales: string[] = injector.get(locale); expect(locales).toEqual(['en', 'sk']);
      
      const locale = new InjectionToken<string[]>('locale');
const injector = Injector.create([
  {provide: locale, multi: true, useValue: 'en'},
  {provide: locale, multi: true, useValue: 'sk'},
]);

const locales: string[] = injector.get(locale);
expect(locales).toEqual(['en', 'sk']);