#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.