Spec-Zone.ru › Angular

ClassProvider

Настраивает Injector для возврата экземпляра useClass для токена.

Руководство по внедрению зависимостей

API

interface ClassProvider extends ClassSansProvider {
  provide: any;
  multi?: boolean | undefined;
  override useClass: Type<any>;
}

provide

any

Токен внедрения. (Обычно экземпляр Type или InjectionToken, но может быть any).

multi

boolean | undefined

Если значение равно true, инжектор возвращает массив экземпляров. Это полезно, когда несколько провайдеров в разных файлах должны предоставлять сведения о конфигурации для общего токена.

useClass

Type<any>

Класс, который нужно создать для token.

Примечания по использованию

abstract class Shape {
          name!: string;
        }

        class Square extends Shape {
          override name = 'square';
        }

        const injector = Injector.create({providers: [{provide: Shape, useValue: new Square()}]});

        const shape: Shape = injector.get(Shape);
        expect(shape.name).toEqual('square');
        expect(shape instanceof Square).toBe(true);

Обратите внимание, что следующие два провайдера не равны:

class Greeting {
          salutation = 'Hello';
        }

        class FormalGreeting extends Greeting {
          override salutation = 'Greetings';
        }

        const injector = Injector.create({
          providers: [
            {provide: FormalGreeting, useClass: 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));

Пример с несколькими значениями

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']);

Super-powered by Google ©2010–2025.
Code licensed under an MIT-style License. Documentation licensed under CC BY 4.0.
https://angular.dev/api/core/ClassProvider

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API