2016-08-25 44 views
2

我有根AppModule其中我描述的依賴關係,我有@InjectableJwtLocalStorage。我想知道如何通過作爲tokenGetterprovideAuth()。可能嗎?我應該爲此做些什麼?在NgModule中使用實例化的依賴關係

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 { 

} 

智威湯遜,本地storage.ts

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

    } 

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

附:我正在使用Angular 2.0.0-rc.5

+0

我真的不明白「我怎麼能傳遞JwtLocalStorage.prototype.getToken()作爲tokenGetter在provideAuth()」。你到底想要傳遞什麼? –

+0

@GünterZöchbauer我想將'JwtLocalStorage'類的'getToken()'方法傳遞給''giveAuth()'輔助函數''tokenGetter'屬性。現在我已經在'AppModule'中複製了'getToken()'的實現。 – user1636505

+0

我想我現在明白了,但不知道。我想你可以使用自定義的'provideAuth()'方法或者直接將方法的內容複製到模塊提供程序中,但看起來像是惡化 –

回答

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 { 

}