Как внедрить httpClient в инстанцированный сервис? - PullRequest
0 голосов
/ 12 января 2019

Я создаю экземпляр MyService в app.module.ts и предоставляю его в своем коде.

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

Я смотрел на создание экземпляра httpClient напрямую, а затем на передачу его в качестве параметра моему сервису. Однако, похоже, это создает круговую зависимость. Я также пытался связываться с инжекторами, но это явно рекомендовано командой Angular. Я чувствую, что упускаю что-то простое.

app.module.ts

imports: [
    ...
    httpClientModule
    ...
],

function MainServiceFactory() {
    return new MyService();
}
...
providers: [{
    provide: MyService,
    useFactory: MainServiceFactory
}],
...

MyService.ts

...
constructor(private http : HttpClient) {
    ...
}

Без создания экземпляра и передачи в качестве параметра httpClient: я получаю «ошибку в app.module.ts, ожидаемый 1 аргумент», естественно! С экземпляром нарушаю угловые рекомендации.

Edit: Я забыл указать, что импортировал httpClientModule

1 Ответ

0 голосов
/ 12 января 2019

Как все говорят, вы должны импортировать HttpClientModule

Глядя на ваш код, я думаю, вы пытаетесь разобраться с angular's dependency injection:

Я сделал пример в стеке:

https://stackblitz.com/edit/angular-yqvlv7?file=src%2Fapp%2Fapp.module.ts

Где я определяю абстрактный класс, который будет вести себя как интерфейс, а затем my.service реализует этот интерфейс.

Внутри app.module я предоставляю интерфейс с использованием класса my-service. После всего этого вы можете добавить «интерфейс» в компонент (по этой ссылке hello.component.ts)

HttpClient вводится только в my-service и проблем вообще нет.

Надеюсь, это поможет вам лучше понять это.

...