StaticInjector против ReflectiveInjector в угловой

Angular 5.x будет включать в себя новые StaticInjector как упоминалось в этом твите. У меня есть два вопроса:

  • Чем он отличается от существующего ReflectiveInjector?
  • Это сломает какой-либо из моих существующих кодов?

1 ответ

Решение

Во-первых, есть отличная статья. Angular представляет StaticInjector. Должны ли вы заботиться? это объясняет разницу в деталях.

Чем он отличается от существующего ReflectiveInjector?

ReflectiveInjector

Полагается на возможности отражения, предоставляемые Reflect библиотека для извлечения неявных зависимостей для провайдера, отсюда и название Reflective:

class B {}
class A {
  constructor(@Inject(B) b) { } <----- `B` is implicit dependency
}

const i = ReflectiveInjector.resolveAndCreate([A, B]);

@Inject декоратор определяет метаданные, определяющие неявные зависимости и ReflectiveInjector использует эти метаданные.

StaticInjector

Не использует отражающие возможности и требует явного указания зависимостей:

class B {}
class A { constructor(b) {} }
const i = Injector.create([{provide: A, useClass: A, deps: [B]]};
const a = i.get(A);

Это сломает какой-либо из моих существующих кодов? Изменения коснутся только поставщиков, поставляемых поставщикам платформ и компиляторов. Так что, если вы предоставили их так:

class B1 {}
class A1 { constructor(@Inject(B1) b) {} }

class B2 {}
class A2 { constructor(@Inject(B2) b) {} }
bootstrapModule(AppModule, {providers: [A1, B1]}).platformBrowserDynamic([A2, B2])

Теперь вы должны изменить это на:

class B1 {}
class A1 { constructor(b) {} }

class B2 {}
class A2 { constructor(b) {} }

platformBrowserDynamic([{ provide: A1, useClass: A1, deps: [B1] }, B1])
.bootstrapModule(AppModule, { providers: [ {provide: A2, useClass: A2, deps: [B2]}, B2 ] })

ReflectiveInjector все еще помечен как стабильный, так что вы, вероятно, можете продолжить его Но есть большая вероятность, что это будет удалено в будущем. Я предлагаю вам начать использовать StaticInjector как только это станет доступно.

Другие вопросы по тегам