http: HttpClient
метаданные должны передаваться во время компиляции, чтобы их можно было распознать как внедрение зависимостей. Из-за того, как работает передача метаданных типа, декоратор должен быть указан в классе, который содержит метаданные.
В иерархии инъекционных классов с зависимостями, аннотированными типами TypeScript, такими как http: HttpClient
, base класс нуждается @Injectable()
декоратор:
@Injectable()
export abstract class BaseService{
constructor(private http: HttpClient) {}
}
export class MyService extends BaseService {}
Если у дочернего класса есть собственный конструктор, ему также нужен @Injectable()
декоратор:
@Injectable()
export abstract class BaseService{
constructor(private http: HttpClient) {}
}
@Injectable()
export class MyService extends BaseService {
constructor(http: HttpClient, private foo: Foo) {
super(http);
}
}
Из-за того, как работает @Injectable
, в классах, где используется явная аннотация @Inject
, нет необходимости.