Ich versuche das DI-System von Angular 2 zu verwenden, um die Abhängigkeiten meiner Dienste automatisch zu verarbeiten. Ich möchte eine Anmerkung zu dem Dienst selbst verwenden, anstatt den zweiten Parameter bootstrap()
zu verwenden, um alle injizierbaren Dienste anzugeben.Angeben von Anbietern bei Service in Angular 2
Was ich
Ein Low-Level-Service haben:
services/role-store.ts
export class RoleStore {
constructor() {
// Initialize roles
}
getById(id) {
// accepts id, returns role object
}
};
Ein High-Level-Dienst, der auf dem Low-Level-Dienst abhängig:
services/user-store.ts
import {Injectable} from 'angular2/angular2';
import {RoleStore} from './role-store.ts';
@Injectable()
export class UserStore {
constructor(roleStore: RoleStore) {
this.roleStore = roleStore;
// Initialize users
}
roleForUser(user) {
let role = this.roleStore.getById(user.roleId);
return role;
}
};
Eine Komponente, die auf dem High-Level-Dienst abhängt:
components/user-dir.ts
import {Component, View, CORE_DIRECTIVES} from 'angular2/angular2';
import {UserStore} from '../services/user-store';
@Component({
selector: 'user-dir',
bindings: [UserStore]
})
@View({
template: '<!-- inline template -->',
directives: [CORE_DIRECTIVES]
})
export class UserDir {
constructor(data: UserStore) {
this.userStore
}
// other methods...
}
A Wurzelkomponente Bootstrap:
app.ts
import {Component, View, bootstrap} from 'angular2/angular2';
import {RoleStore} from './services/role-store';
import {UserDir} from './components/user-dir';
@Component({
selector: 'app'
})
@View({
template: '<user-dir></user-dir>',
styleUrls: ['./app.css'],
directives: [UserDir]
})
class App {}
bootstrap(App, [RoleStore]);
Das Problem
bootstrap(App, [RoleStore])
funktioniert, aber ich hätte lieber eine Annotation in user-store.ts
, die Angular zu injizieren RoleStore
sagt.
Etwas wie @Provide(RoleStore) class UserStore {}
.
Irgendwelche Ratschläge?
Es gab eine [Pull-Anfrage] (https://github.com/angular/angular/pull/4154), die dies oder ähnliches tut, aber es wurde als eine Art Standby geschlossen. –
Sorry, ich habe mich nicht klar gemacht :(. Dass PR wurde nicht akzeptiert. Sie könnten in der gleichen Frage fragen, ob sie es noch einmal überdenken. –
@EricMartinez Keine Sorge, ich habe dich verstanden (ich habe gerade einen schlechten Job gemacht * mich * klar ;))! Ich bin mir sicher, dass es nicht schaden wird, auf Alpha-44 zu aktualisieren. Wenn es das Problem behebt, großartig. Ansonsten werde ich das ursprüngliche Problem untersuchen und sehen, ob ich es wiederbeleben kann. –