I have three classes:
@Injectable()
export class ApiService {
constructor(public http: Http) {}
get(url: string) {
return http.get(url);
}
}
@In
I think that it's not something supported. It's the way dependency injection works in Angular2, i.e. based on decorators. The latters uses the constructor of the associated class to determine what must be injected. You must be aware that the concept of class and extends are natively supported by TypeScript but such code is transpiled into JavaScript.
See this answer for more details about the transpiled code:
Hope it helps you, Thierry
If you want to get it passed in by DI you have to use the constructor. Constructors are not inherited therefore you need to implement the constructor in each and every subclass and pass arguments to the superclass constructor by calling super(arguments)
.
The only exception are default constructors without any arguments which are kinda autogenerated.
What you could do is to inject Injector
and pass it forward to the superclass where the superclass requests Http
from the Injector
imperatively. This might be a bit of an advantage if you inject multiple services because you only have to declare one constructor argument but in my opinion this makes it harder to reason about the code.