我想要提供服务,无需导入组件即可看到。
我的自举功能:
export function main(initialHmrState?: any): Promise<any> {
console.log(APP_PROVIDERS);
return bootstrap(App, [
...PLATFORM_PROVIDERS,
...ENV_PROVIDERS,
...APP_PROVIDERS
])
.then(decorateComponentRef)
.catch(err => console.error(err));
}
应用提供商定义:
export * from './app.component';
export * from './user.state';
export * from './app.service';
import { UserState } from './user.state';
import { AppState } from './app.service';
// Application wide providers
export const APP_PROVIDERS = [
UserState,
AppState
];
我不能在组件构造函数中调用它
constructor( private userState: UserState ) {}
我如何解决我的问题?
答案 0 :(得分:1)
通过导入它或使用字符串标记或OpaqueToken
和`@Inject()
export const APP_PROVIDERS = [
{provide: 'UserState', useClass: UserState},
AppState
];
constructor(@Inject('UserState') private userState: any ) {}
答案 1 :(得分:1)
分为两部分:
在这两种情况下,您都需要导入相应的类型。否则,他们将无法解决......
请注意,使用类型进行依赖项注入不是必需的。您最终可以使用OpaqueToken
s:
export const SOME_TOKEN = new OpaqueToken('sometoken');
let provider = { provide: token, useClass: UserState };
并使用它:
constructor( @Inject(SOME_TOKEN) private userState: UserState ) {}
但在这种情况下,您还需要导入不透明令牌......