Я работаю с Angular 8.
Этот вопрос только для Angular экспертов DI.
Сначала я создал библиотеку Angular, которая будет использоваться во многих project.
В этой библиотеке я создал абстрактный сервис, который должен быть определен в проекте, используя его.
Я определил абстрактный класс в моей библиотеке с именем BridgeService
и в моем основном проекте я создаю свой BridgeService, реализующий его: (в следующих строках я покажу вам абстрактный BridgeService)
MainProject> BridgeService:
import { BridgeService as AbstractBridgeService } from 'myLibrary';
@Injectable()
export class BridgeService implements AbstractBridgeService {
hello(){
alert('hello Word');
}
}
MainProject> UsersModule:
import { UsersModule as LibraryUsersModule } from 'myLibrary';
@NgModule({
imports: [
CommonModule,
LibraryUsersModule,
],
//...
providers: [
BridgeService
// some try:
//{ provide: BridgeService, useClass: BridgeService }
],
})
export class UsersModule {
constructor(private bridgeService: BridgeService){
this.bridgeService.hello();
}
}
И теперь мы должны увидеть файлы, относящиеся к библиотеке:
Library> bridge.service.ts:
export abstract class BridgeService {
abstract hello(): void;
}
Этот BridgeService должен быть определен в UsersModule
Library> UsersModule:
@NgModule({
//...
providers: [
// My Try:
{ provide: BridgeService, useValue: BridgeService}
],
})
export class UsersModule {
# my goal is that I can uncomment this piece of code:
//constructor(private bridgeService: BridgeService){
// this.bridgeService.hello();
//}
}
Я хочу, чтобы вы коснулись в этом коде всего две строки:
1) В массиве провайдеров UsersModule библиотеки: строка BridgeS сервис, который я хочу объявить как реферат, будет обобщенным c.
2) В массиве провайдеров UsersModule проекта: строка BridgeService, которую я хочу определить вместо абстракции в UserModule библиотеки.