2016-08-25 4 views
2

У меня есть корень AppModule, в котором я описываю зависимости, и у меня есть @InjectableJwtLocalStorage. Интересно, как я могу пройти JwtLocalStorage.prototype.getToken() как tokenGetter в provideAuth(). Является ли это возможным? Что я должен сделать для этого?Использование экземплярированной зависимости в 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 { 

} 

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

+0

Я не понимаю «как я могу передать JwtLocalStorage.prototype.getToken() как tokenGetter в provideAuth()». Что именно вам нужно передать где? –

+0

@ GünterZöchbauer Я хочу передать 'getToken()' метод класса 'JwtLocalStorage' для' обеспеченияAuth() 'вспомогательной функции как свойство tokenGetter'. На данный момент я дублировал реализацию 'getToken()' в 'AppModule'. – user1636505

+0

Думаю, я понимаю сейчас, но понятия не имею. Я предполагаю, что вы можете использовать собственный метод 'compAuth()' или скопировать содержимое метода непосредственно поставщикам модулей, но это выглядит как ухудшение –

ответ

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 { 

} 
Смежные вопросы