2017-09-25 32 views
0

我也很難使用一個OpenID身份驗證包與這個配置....依賴注射角4:我的服務不是一個單

我有3個模塊:

模塊1:mainApplication 模塊2:核心 模塊3:門戶

我在覈心模塊中有一個服務(AuthService),從angular-oauth2-oidc擴展OAuthService。

這只是一種從angular-oauth2-oidc中分離依賴性的方法。

mainApplication模塊正在加載門戶&核心服務。

@NgModule({ 
    declarations: [ 
    ], 
    entryComponents: [ 
    ], 
    imports: [ 
    CommonModule, 
    IsocialCoreModule.forRoot(), 
    IsocialPortalModule.forRoot(portalConfig), 
    ])} 
    export class MyMainApp {} 

我portalModule:

imports: [ 
    MyCoreModule, 
    ], 
}) 
export class MyPortalModule { 
    static forRoot(config: PortalConfig): ModuleWithProviders { 
    return { 
     ngModule: PortalModule, 
     providers: [ConfigService, 
       {provide: PortalConfigToken, useValue: config}, 
       AuthService// --> Error if not added] 
    }; 
    } 
} 

我coreModule:

@NgModule({ 
    imports: [ 
    HttpModule, 
    OAuthModule.forRoot() 
    ], 
    declarations: [], 
}) 
export class MyCoreModule { 
    static forRoot(): ModuleWithProviders { 
    return { 
     ngModule: MyCoreModule, 
     providers: [BasicGuardService, AuthService // Error if not added] 
    }; 
    } 
} 

我的配置服務:

constructor(@Inject(PortalConfigToken) private portalConfig: PortalConfig, private authService: AuthService) { 
    this.config = this.portalConfig; 
    this.authService.configure(this.portalConfig.authConfig); 
    } 

看來,AuthService是實例化一個以上的時間。 ..

我在配置服務的那一刻和使用它的那一刻失去了配置。

回答

0

僅在「主應用程序」中添加服務(在提供商中)。因此,「主要應用程序」中的導入模塊共享相同的服務

+0

我試過了。但通過這樣做,我有一個例外情況說供應商沒有定義。 – bokzor

+0

錯誤錯誤:沒有提供AuthService! 我必須將它作爲依賴項添加到Core,Portal和MainApp中 – bokzor

+0

對不起,我是Angular4中的一個新手。我認爲如果你使用mainApplication,@NgModule({declarations:[..],imports [..],providers [AuthService] ..)}你只需要導入你需要的組件中的AuthService – Eliseo