Рефлексивный инжектор
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