【发布时间】:2016-06-05 01:38:57
【问题描述】:
我正在尝试使用 Angular 2 的 DI 系统来自动处理我的服务的依赖关系。我想在服务本身上使用注解,而不是使用bootstrap() 的第二个参数来指定所有可注入服务。
我有什么
低级服务:
services/role-store.ts
export class RoleStore {
constructor() {
// Initialize roles
}
getById( id ) {
// accepts id, returns role object
}
};
依赖于低级服务的高级服务:
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;
}
};
依赖于高级服务的组件:
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...
}
引导的根组件:
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] );
问题
bootstrap( App, [RoleStore] ) 有效,但我宁愿在 user-store.ts 中有一个注释,告诉 Angular 注入 RoleStore。
类似@Provide( RoleStore ) class UserStore {}。
有什么建议吗?
【问题讨论】:
-
有一个 pull request 可以执行此操作或类似操作,但它已作为某种待机而关闭。
-
对不起,我没有说清楚 :(。那个 PR 没有被接受。你可以在同一个问题上问他们是否会重新考虑。
-
@EricMartinez 不用担心,我理解你(我只是做得很糟糕,让 我自己 变得清晰;))!我相信升级到 alpha-44 不会有什么坏处。如果它碰巧解决了这个问题,那就太好了。否则,我会调查原始问题,看看是否可以恢复它。
-
现在我们处于测试阶段,我仍然遇到同样的问题。我想象一个具有 100-300 个服务的非常大的应用程序 - 它们都应该作为参数插入到引导过程中吗?
-
我遇到了同样的问题,我希望为 typescript 实现 @Injectable 的角度,并添加类似 components has @Injectable({ providers: ['RoleStore '] );
标签: angular