Войтехабарта / Машинопись-генератор / HttpClient - PullRequest
1 голос
/ 21 января 2020

Я использую плагин maven для генерации angular клиента для сервисов весеннего отдыха.

У меня есть сервис отдыха под названием UserResources. Вот сгенерированный код:

export interface HttpClient {

    request<R>(requestConfig: { method: string; url: string; queryParams?: any; data?: any; copyFn?: (data: R) => R; }): RestResponse<R>;
}

export class UserResourcesClient {

    constructor(protected httpClient: HttpClient) {
    }
...

Я создал реализацию интерфейса HttpClient в отдельном файле:

@Injectable()
export class HttpClientImpl implements HttpClient {
    request<R>(
        requestConfig: { 
            method: string; 
            url: string;
            queryParams?: any; 
            data?: any; 
            copyFn?: (data: R) => R; 
        }
    ): RestResponse<R> {
        return null;
    }
}

В моем app.module.ts я объявил HttpClientImpl как провайдер

providers: [
        HttpClientImpl
    ]

Код компилируется, но не работает. Ошибка: Unhandled Promise rejection: Can't resolve all parameters for UserResourcesClient: (?). ; Zone: <root> ; Task: Promise.then ; Value: Error: "Can't resolve all parameters for UserResourcesClient: (?)."

Кажется, что angular не использует HttpClientImpl, когда есть ссылка на HttpClient

Если вы можете помочь

Спасибо

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Решением было присвоить классу одно и то же имя:

@Injectable()
export class HttpClientimplements HttpClient {

Очень странно, но оно работает

Если у вас есть лучшее решение ...

0 голосов
/ 21 января 2020

Вы должны использовать HttpClientImpl вместо HttpClient в конструкторе

export class UserResourcesClient {

constructor(protected httpClientImpl: HttpClientImpl) {
}

...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...