Внедрение и разрешение провайдеров angular2 по строке

Я пытаюсь внедрить провайдеров на основе данных времени выполнения в мой компонент angular2.

Пока у меня это:

  let type: PropertyDescriptor = Object.getOwnPropertyDescriptor(providers, provider.name);
  if (!type) return;

  let injector: Injector = ReflectiveInjector.resolveAndCreate([(<any>type).get()]);
  let resolvedProvider: IAnalyticRepository = injector.get((<any>type).get());

Это пытается создать поставщика, но из-за его дочерних зависимостей выдает ошибку.

Ошибка, которую я получаю:

Ошибка: Нет провайдера для HttpHandler! (GoogleRepository -> HttpHandler)

Как мне продолжить внедрение дочерних провайдеров в разрешенный провайдер?


person misha130    schedule 21.12.2016    source источник
comment
Какая ошибка? Как это связано с провайдерами по строке?   -  person Günter Zöchbauer    schedule 21.12.2016
comment
Я пытаюсь сказать, что делаю инъекцию динамически. Я отредактирую, чтобы добавить ошибку.   -  person misha130    schedule 21.12.2016


Ответы (1)


Я предполагаю, что вы хотите создать инжектор, который также включает поставщиков Angular2 при разрешении

constructor(private injector:Injector) {}

...

someMethod() {    
  let resolvedProviders = ReflectiveInjector.resolve([Car, Engine]);
  let child = ReflectiveInjector.fromResolvedProviders(
      resolvedProviders, 
      this.injector
  );
}

См. также Inject службы с ReflectiveInjector без указания всех классов в дереве зависимостей

person Günter Zöchbauer    schedule 21.12.2016