Zastanawiam się, czy istnieje odpowiedni sposób na wstrzykiwanie interfejsów w Angular2? (poniżej)Czy można wtrysnąć interfejs za pomocą kątowego 2?
Myślę, że jest to związane z brakującym dekoratorem @Injectable() w interfejsie, ale wygląda na to, że jest to niedozwolone.
Pozdrawiam.
Kiedy CoursesServiceInterface jest zaimplementowana jako interfejs, kompilator maszynopis narzeka "CoursesServiceInterface nie można znaleźć nazwy":
import {CoursesServiceInterface} from './CoursesService.interface';
import {CoursesService} from './CoursesService.service';
import {CoursesServiceMock} from './CoursesServiceMock.service';
bootstrap(AppComponent, [
ROUTER_PROVIDERS,
GlobalService,
provide(CoursesServiceInterface, { useClass: CoursesServiceMock })
]);
ale z CoursesServiceInterface jako interfejs:
import {Injectable} from 'angular2/core';
import {Course} from './Course.class';
//@Injectable()
export interface CoursesServiceInterface {
getAllCourses(): Promise<Course[]>;//{ return null; };
getCourse(id: number): Promise<Course>;// { return null; };
remove(id: number): Promise<{}>;// { return null; };
}
Gdy usługa jest klasą, kompilator TypeScript nie narzeka już:
import {Injectable} from 'angular2/core';
import {Course} from './Course.class';
@Injectable()
export class CoursesServiceInterface {
getAllCourses() : Promise<Course[]> { return null; };
getCourse(id: number) :Promise<Course> { return null; };
remove (id: number) : Promise<{}> { return null; };
}
useClass: było to, czego brakuje ... szkoda, że nie jest w oficjalnym poradniku – Aligned
https://angular.io/docs/ts/ latest/cookbook/dependency-injection.html #! # usevalue –