角度依赖注入到导出函数中

时间:2018-10-05 06:18:52

标签: angular dependency-injection module

我正在使用apollo graphql,它具有一个内部带有功能的模块。

export function createApollo(httpLink: HttpLink, connectToDevTools: true){

在此函数中,您可以定义graphql端点const uri = http://127.0.0.1/graphql的网址。

我想将此URL从服务导入(这样,我只需要在一个地方更改后端服务器URL),但由于属性仍未定义,因此我无法注入服务。

export function createApollo(httpLink: HttpLink, connectToDevTools: true, urlservice: UrlsService) {
    const uri = urlservice.graphqlAddress;

错误:Cannot read property 'graphqlAddress' of undefined

我也曾尝试将服务注入模块构造函数中,但这甚至更低,其结果相同。

如何将外部属性添加到函数createApollo中?

我的服务基本上是这样的:

export class UrlsService {
    ...
    graphqlAddress = 'http://192.168.2.24:8000/graphql/';
    ...
}

GraphQLModule提供程序:

@NgModule({
    exports: [ApolloModule, HttpLinkModule],
    providers: [
        UrlsService,
        {
            provide: APOLLO_OPTIONS,
            useFactory: createApollo,
            deps: [HttpLink],
        },
    ],
})
export class GraphQLModule {
}

1 个答案:

答案 0 :(得分:0)

在声明带有参数的工厂函数时,需要在提供程序配置的依赖项设置deps中声明这些参数。 (这在angular doc中有解释)。因此,在您的示例中,您需要添加UrlsService

@NgModule({
    exports: [ApolloModule, HttpLinkModule],
    providers: [
        UrlsService,
        {
            provide: APOLLO_OPTIONS,
            useFactory: createApollo,
            deps: [HttpLink, UrlsService],
        },
    ],
})
export class GraphQLModule {
}

此外,connectDevTools参数看起来好像没有正确声明

export function createApollo(httpLink: HttpLink, connectToDevTools: true, urlservice: UrlsService)