2017-09-25 35 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