Spec-Zone.ru › Angular 2

Рефлексивный инжектор

Stable Class

Обзор класса

class ReflectiveInjector implements Injector {
  static resolve(providers: Provider[]) : ResolvedReflectiveProvider[]
  static resolveAndCreate(providers: Provider[], parent?: Injector) : ReflectiveInjector
  static fromResolvedProviders(providers: ResolvedReflectiveProvider[], parent?: Injector) : ReflectiveInjector
  parent : Injector
  resolveAndCreateChild(providers: Provider[]) : ReflectiveInjector
  createChildFromResolved(providers: ResolvedReflectiveProvider[]) : ReflectiveInjector
  resolveAndInstantiate(provider: Provider) : any
  instantiateResolved(provider: ResolvedReflectiveProvider) : any
  get(token: any, notFoundValue?: any) : any
}

Описание класса

Контейнер для инъекции зависимостей, используемый для создания объектов и разрешения зависимостей.

Он является заменой оператора Injector, который может автоматически разрешать зависимости конструктора.

В типичном использовании, код приложения запрашивает зависимости в конструкторе, и они разрешаются Injector.

Пример (демонстрация в браузере)

Следующий пример создает инжектор, настроенный для создания Engine и Car.

@Injectable()
class Engine {
}

@Injectable()
class Car {
  constructor(public engine:Engine) {}
}

var injector = ReflectiveInjector.resolveAndCreate([Car, Engine]);
var car = injector.get(Car);
expect(car instanceof Car).toBe(true);
expect(car.engine instanceof Engine).toBe(true);

Обратите внимание, что мы не используем оператор new, так как явно хотим, чтобы Injector автоматически разрешил все зависимости объекта.

Статические члены

resolve(providers: Provider[]) : ResolvedReflectiveProvider[]

Преобразует массив определений поставщиков в массив разрешенных поставщиков.

Разрешение включает в себя процесс выравнивания нескольких вложенных массивов и преобразования отдельных поставщиков в массив ResolvedReflectiveProvider.

(демонстрация в браузере)

@Injectable()
class Engine {
}

@Injectable()
class Car {
  constructor(public engine:Engine) {}
}

var providers = ReflectiveInjector.resolve([Car, [[Engine]]]);

expect(providers.length).toEqual(2);

expect(providers[0] instanceof ResolvedReflectiveProvider).toBe(true);
expect(providers[0].key.displayName).toBe("Car");
expect(providers[0].dependencies.length).toEqual(1);
expect(providers[0].factory).toBeDefined();

expect(providers[1].key.displayName).toBe("Engine");
});

См. ReflectiveInjector для получения дополнительной информации.

resolveAndCreate(providers: Provider[], parent?: Injector) : ReflectiveInjector

Разрешает массив поставщиков и создает инжектор из этих поставщиков.

Передаваемые поставщики могут быть массивом Type, Provider или рекурсивным массивом других поставщиков.

(демонстрация в браузере)

@Injectable()
class Engine {
}

@Injectable()
class Car {
  constructor(public engine:Engine) {}
}

var injector = ReflectiveInjector.resolveAndCreate([Car, Engine]);
expect(injector.get(Car) instanceof Car).toBe(true);

Эта функция медленнее соответствующей fromResolvedProviders функции, поскольку ей необходимо предварительно разрешить переданные поставщики. См. Injector и Injector.

fromResolvedProviders(providers: ResolvedReflectiveProvider[], parent?: Injector) : ReflectiveInjector

Создает инжектор из предварительно разрешенных поставщиков.

Этот API рекомендуется для создания инжекторов в ресурсоёмких частях.

(демонстрация в браузере)

@Injectable()
class Engine {
}

@Injectable()
class Car {
  constructor(public engine:Engine) {}
}

var providers = ReflectiveInjector.resolve([Car, Engine]);
var injector = ReflectiveInjector.fromResolvedProviders(providers);
expect(injector.get(Car) instanceof Car).toBe(true);

Подробности класса

parent : Injector

Родительский инжектор.

(демонстрация в браузере)

var parent = ReflectiveInjector.resolveAndCreate([]);
var child = parent.resolveAndCreateChild([]);
expect(child.parent).toBe(parent);
resolveAndCreateChild(providers: Provider[]) : ReflectiveInjector

Разрешает массив поставщиков и создаёт дочерний инжектор из этих поставщиков.

Передаваемые поставщики могут быть массивом Type, Provider или рекурсивным массивом других поставщиков.

(демонстрация в браузере)

class ParentProvider {}
class ChildProvider {}

var parent = ReflectiveInjector.resolveAndCreate([ParentProvider]);
var child = parent.resolveAndCreateChild([ChildProvider]);

expect(child.get(ParentProvider) instanceof ParentProvider).toBe(true);
expect(child.get(ChildProvider) instanceof ChildProvider).toBe(true);
expect(child.get(ParentProvider)).toBe(parent.get(ParentProvider));

Эта функция медленнее соответствующей createChildFromResolved функции, поскольку ей необходимо предварительно разрешить переданные поставщики. См. Injector и Injector.

createChildFromResolved(providers: ResolvedReflectiveProvider[]) : ReflectiveInjector

Создаёт дочерний инжектор из предварительно разрешённых поставщиков.

Этот API рекомендуется для создания инжекторов в ресурсоёмких частях.

(демонстрация в браузере)

class ParentProvider {}
class ChildProvider {}

var parentProviders = ReflectiveInjector.resolve([ParentProvider]);
var childProviders = ReflectiveInjector.resolve([ChildProvider]);

var parent = ReflectiveInjector.fromResolvedProviders(parentProviders);
var child = parent.createChildFromResolved(childProviders);

expect(child.get(ParentProvider) instanceof ParentProvider).toBe(true);
expect(child.get(ChildProvider) instanceof ChildProvider).toBe(true);
expect(child.get(ParentProvider)).toBe(parent.get(ParentProvider));
resolveAndInstantiate(provider: Provider) : any

Разрешает поставщика и создаёт объект в контексте инжектора.

Созданный объект не кэшируется инжектором.

(демонстрация в браузере)

@Injectable()
class Engine {
}

@Injectable()
class Car {
  constructor(public engine:Engine) {}
}

var injector = ReflectiveInjector.resolveAndCreate([Engine]);

var car = injector.resolveAndInstantiate(Car);
expect(car.engine).toBe(injector.get(Engine));
expect(car).not.toBe(injector.resolveAndInstantiate(Car));
instantiateResolved(provider: ResolvedReflectiveProvider) : any

Создаёт объект с использованием разрешённого поставщика в контексте инжектора.

Созданный объект не кэшируется инжектором.

(демонстрация в браузере)

@Injectable()
class Engine {
}

@Injectable()
class Car {
  constructor(public engine:Engine) {}
}

var injector = ReflectiveInjector.resolveAndCreate([Engine]);
var carProvider = ReflectiveInjector.resolve([Car])[0];
var car = injector.instantiateResolved(carProvider);
expect(car.engine).toBe(injector.get(Engine));
expect(car).not.toBe(injector.instantiateResolved(carProvider));
get(token: any, notFoundValue?: any) : any

экспортировано из @angular/core/index, определено в @angular/core/src/di/reflective_injector.ts

© 2010–2017 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://v2.angular.io/docs/ts/latest/api/core/index/ReflectiveInjector-class.html

Spec-Zone.ru

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