Угловой 6 при условии - как настроить поставщика @Injectable () для внедрения зависимости? - PullRequest
0 голосов
/ 23 мая 2018

В Angular 5, если бы у меня были AbstractClassService и ExtendedClassService, расширяющие реферат, я мог бы сделать это в массиве провайдеров моего NgModule:

@NgModule({
  providers: [
    {provide: AbstractClassService, useClass: ExtendedClassService}
  ]
})
export class AppModule {}

Это позволило бы мне переключиться ExtendedClassServiceс другим для тестирования или что-то очень легко.Это все еще может быть сделано с Angular 6, однако есть новая опция providedIn, которая может быть установлена ​​в самой службе для уменьшения размера пакета:

@Injectable({providedIn: 'root'})
export class ExtendedClassService extends AbstractClassService {}

Есть ли способ для меня, чтобы сделать то же самоечто я имел с Angular 5 при использовании нового providedIn?Примерно так:

@Injectable({providedIn: 'root', provide: AbstractClassService})
export class ExtendedClassService extends AbstractClassService {}

1 Ответ

0 голосов
/ 23 мая 2018

Мне нужно было сделать две вещи.

Во-первых, использовать implements вместо extends при создании наследующего класса и не использовать там ключ providedIn:

@Injectable() // removed providedIn
export class ExtendedClassService implements AbstractClassService {}

Во-вторых, вместо этого добавьте инструкции провайдера в абстрактный класс:

@Injectable({providedIn: 'root', useClass: ExtendedClassService})
export abstract class AbstractClassService {}

Также можно использовать другую конфигурацию провайдера (useValue, useExisting, useFactory).

Кредит отправляется в Абинеш с этим комментарием , что привело меня к сообщению в блоге .Большое спасибо автору блога!

...