Angular2:如何通过提供程序

时间:2016-02-23 17:13:25

标签: angular

所以我有这个名为StoreService的类:

import {Injectable} from "angular2/core";
import {BusinessAction} from "../business/BusinessAction";
import {AppStore} from "angular2-redux-util/dist/index";

@Injectable()
export class StoreService {
    constructor(private appStore:AppStore, private businessActions:BusinessAction) {
        this.appStore.dispatch(this.businessActions.fetchBusinesses());
    }
}

其他组件依赖注入此类“StoreService”。 但是,注入StoreService的这些组件抱怨没有BusinessAction的提供程序。

现在可以肯定的是,我可以通过提供商向他们提供BusinessAction:[BusinssAction]甚至可以在主引导程序提供商那里提供它......(一切都很好......

但是,我不想只因为StoreService应该知道并关心BusinessAction,有没有办法告诉Injectors从StoreService获取BusinessAction的实例,这是唯一一个使用BusinessAction的类?

TX

肖恩

2 个答案:

答案 0 :(得分:1)

您需要将BusinessAction添加到bootstrap(AppComponent, [OtherProviders, StoreService, BusinessAction])

中的提供商列表中

另见https://github.com/angular/angular/issues/5622

答案 1 :(得分:0)

必须从执行处理的组件的注入器中看到SomeComponent -> StoreService -> BusinessAction类的提供程序。我的意思是:SomeComponent

Günter是对的!在引导主要组件时放置提供程序将起作用。在这种情况下,该服务将可用于所有应用程序。如果您只想指定providers,请将其放在@Component({ (...) providers: [ StoreService, BusinessAction ] }) export class SomeComponent { } 属性中:

curl -X POST -u 'admin:admin' -d 'resource=somedomain:aem' -d 'id=sonar.profile.java' -d 'value=java-sonar-way-aem-rules-22238' 'http://localhost:9000/sonar/api/properties'

您也可以在父组件中定义它,如果有的话......

我认为这个答案可以帮助您理解依赖注入在Angular2中的工作原理: