Cookies concent notice

This site uses cookies from Google to deliver its services and to analyze traffic.
Learn more
Skip to main content
This site is no longer updated.Head to Angular.devHome
/

This is the archived documentation for Angular v17. Please visit angular.dev to see this page for the current version of Angular.

FactoryProvider

Configures the Injector to return a value by invoking a useFactory function.

      
      interface FactoryProvider extends FactorySansProvider {
  provide: any
  multi?: boolean

  // inherited from core/FactorySansProvider
  useFactory: Function
  deps?: any[]
}
    

See also

Properties

Property Description
provide: any

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

multi?: boolean

When true, 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

      
      const Location = new InjectionToken('location');
const Hash = new InjectionToken('hash');

const injector = Injector.create({
  providers: [
    {provide: Location, useValue: 'https://angular.io/#someLocation'},
    {
      provide: Hash,
      useFactory: (location: string) => location.split('#')[1],
      deps: [Location],
    },
  ],
});

expect(injector.get(Hash)).toEqual('someLocation');
    

Dependencies can also be marked as optional:

      
      const Location = new InjectionToken('location');
const Hash = new InjectionToken('hash');

const injector = Injector.create({
  providers: [
    {
      provide: Hash,
      useFactory: (location: string) => `Hash for: ${location}`,
      // use a nested array to define metadata for dependencies.
      deps: [[new Optional(), Location]],
    },
  ],
});

expect(injector.get(Hash)).toEqual('Hash for: null');
    

Multi-value example

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

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