2017-09-25 5 views
0

シングルトン....依存関係注入角度4:私のサービスではない私は、この設定でOpenIDの認証パッケージを使用するために苦労してい

私は3つのモジュールがあります。

モジュール1:mainApplication モジュールを2:core モジュール3:ポータル

私はcore-oauth2-oidcからOAuthServiceを拡張してコアモジュールにサービス(AuthService)を持っています。

これは、角度-oauth2-oidcからdepencyを分離する単なる方法です。

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({宣言:[..]、インポート[..]、プロバイダ[AuthService] ..)}を使用する場合、必要なコンポーネントのAuthServiceのみをインポートする必要があると思った – Eliseo

関連する問題