внедрение угловой зависимости не разрешается для библиотечного компонента

#angular #dependency-injection #library-project

#angular #внедрение зависимости #библиотека-проект

Вопрос:

это простая ситуация. В моем библиотечном проекте, называемом lib-a, определены 3 класса: libAModule, LibAComponent и MyService. У LibAComponent есть конструктор, который принимает MyService в качестве параметра. MyService украшен

 @Injector() 
  

атрибут.

В AppModule корневого приложения я предоставляю эту услугу:

 providers: [MyService]
  

в AppModule также есть конструктор, который принимает MyService в качестве параметра.

Когда я запускаю приложение, зависимость разрешается в конструкторе AppModule (проверяется путем пошагового выполнения в отладчике), однако при попытке отобразить LibAComponent я получаю следующую ошибку в окне консоли браузера:

 Error: StaticInjectorError(AppModule)[libAComponent-> MyService]: 
  StaticInjectorError(Platform: core)[libAComponent-> MyService]: 
    NullInjectorError: No provider for MyService!
  

Я могу исправить это, обновив

 @Injector({provideIn: 'root'}) 
  

атрибут в MyService. Однако теоретически это эквивалентно предоставлению сервиса в AppModule, как я делаю. Причина, по которой я хочу сделать это таким образом, заключается в том, что в конечном итоге я хочу предоставлять сервис в AppModule как таковой:

 providers: [{provide: MyService, useClass: MyExtendedService }] 
  

где myExtendedService определен вне проекта библиотеки.

Кто-нибудь может выяснить, почему я получаю эту ошибку, когда предоставляю сервис через AppModule?

Комментарии:

1. Какую версию Angular вы используете? Можете предоставить нам app.module и MyService.ts? Спасибо

Ответ №1:

Вы должны использовать

  providers: [ MyService ]
  

вместо

 provider: [{provide: MyService, useClass: MyExtendedService }] 
  

Комментарии:

1. Извините, но дело не в этом. В вопросе с моей стороны была опечатка, я использую провайдеров, а не provider.