在NgModule中使用实例化的依赖项

时间:2016-08-25 05:50:34

标签: angular typescript dependency-injection

我有根AppModule,其中我描述了依赖关系,我有@Injectable JwtLocalStorage。我想知道如何在JwtLocalStorage.prototype.getToken()中将tokenGetter作为provideAuth()传递给我。可能吗?我应该为此做些什么?

app.module.ts

@NgModule({
    // ...
    providers: [
        // ...
        provideAuth({
            tokenGetter: () => JSON.parse(localStorage.getItem(TASK_DI_CONFIG.jwtName)),
        }),
        { provide: APP_CONFIG, useValue: TASK_DI_CONFIG },
        { provide: JwtStorage, useClass: JwtLocalStorage }
    ],
    bootstrap: [
        AppComponent
    ]
})
export class AppModule {

}

JWT本地-storage.ts

@Injectable()
export class JwtLocalStorage implements JwtStorage {
    constructor(
        @Inject(APP_CONFIG) private config: AppConfig
    ) {

    }

    getToken() {
        return JSON.parse(localStorage.getItem(this.config.jwtName));
    }
    // ...
}

P.S。我正在使用Angular 2.0.0-rc.5

1 个答案:

答案 0 :(得分:0)

我使用service factory解决了这个问题。 解决方案看起来像这样

@NgModule({
    // ...
    providers: [
        // ...
        {
            provide: AuthHttp,
            useFactory: (http: Http, jwtStorage: JwtStorage) => {
                return new AuthHttp(new AuthConfig({
                    tokenGetter() {
                        return jwtStorage.getToken();
                    }
                }), http);
            },
            deps: [Http, JwtStorage]
        }
    ]
})
export class MyAwesomeModule {

}