我正在尝试使用Angular 2的DI系统来自动处理我的服务的依赖关系.我想在服务本身上使用注释,而不是使用bootstrap()的第二个参数来指定所有可注入服务.
我得到了什么
低级服务:
服务/角色store.ts
export class RoleStore { constructor() { // Initialize roles } getById( id ) { // accepts id,returns role object } };
依赖于低级服务的高级服务:
服务/用户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; } };
依赖于高级服务的组件:
组件/用户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... }
引导程序的根组件:
app.ts
import {Component,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] );
问题
bootstrap(App,[RoleStore])有效,但我宁愿在user-store.ts中有一个注释,告诉Angular注入RoleStore.
像@Provide(RoleStore)类UserStore {}之类的东西.
任何建议?
https://github.com/angular/angular/issues/5622不支持服务提供商
原文链接:https://www.f2er.com/angularjs/141974.html你可以做的是创建像“模块”一样导出的提供程序数组
export const ROLE_STORE_PROVIDERS: Array<any /*Type | Provider | any[]*/> = [RoleStore];
然后在使用RoleStore服务的模块中
export const PARENT_PROVIDERS: Array<any /*Type | Provider | any[]*/> = [ParentService,RoleStore];
然后在bootstrap中使用它
bootstrap(AppComponent,[PARENT_PROVIDERS]);
我承认这不是你要求的,但是到目前为止我找到的最接近.