Что такое декоратор @SkipSelf в Angular?
Декоратор @SkipSelf сообщает DI искать зависимость во всем дереве, начиная с родительского инжектора.
Я наткнулся на декоратор @SkipSelf, как показано ниже. Что делает этот
@SkipSelf
декоратор, что именно имеется в виду в данном случае?
class Dependency {}
@Injectable()
class NeedsDependency {
constructor(@SkipSelf() public dependency: Dependency) { this.dependency = dependency; }
}
const parent = ReflectiveInjector.resolveAndCreate([Dependency]);
const child = parent.resolveAndCreateChild([NeedsDependency]);
expect(child.get(NeedsDependency).dependency instanceof Dependency).toBe(true);
const inj = ReflectiveInjector.resolveAndCreate([Dependency, NeedsDependency]);
expect(() => inj.get(NeedsDependency)).toThrowError();
1 ответ
Начнем построчно:
Первый случай:
A. Создайте родительский инжектор и добавьте к нему:
const parent = ReflectiveInjector.resolveAndCreate([Dependency]);
B. Создайте дочерний инжектор и добавьте к нему, поскольку он предоставляется в родительском инжекторе, структура DI может разрешать зависимости ()
const child = parent.resolveAndCreateChild([NeedsDependency]);
Второй случай:
A. Создайте одиночный инжектор и добавьте к нему оба &:
const inj = ReflectiveInjector.resolveAndCreate([Dependency, NeedsDependency]);
Б. На этот раз разрешение зависимостей не удастся из-за
@SkipSelf()
применяется к, структура DI будет игнорировать
Dependency
экземпляр в
inj
инжектор, и попробуйте найти в иерархии поставщика, который удовлетворяет этой несуществующей зависимости, поэтому
inj.get(NeedsDependency)
выдаст ошибку как
NeedsDependency
не может быть решен.
expect(() => inj.get(NeedsDependency)).toThrowError();