【问题标题】:Angular Service Factory patternAngular 服务工厂模式
【发布时间】:2019-12-26 16:53:06
【问题描述】:

我正在尝试为工作部署一个新模块,但我一直纠结于如何为我的服务实现设计模式。

具体来说,我有一个名为“LoggerService”的通用类,它被我的服务扩展用于控制台日志记录和数据库日志记录。 我现在希望能够导出整个模块并从公司内的代理获取它。 发布和获取工作,但现在的问题是,当我想实例化任一具体服务时,角度告诉我该服务没有导出。 `

@NgModule({
  declarations: [NgxCmLoggerComponent],
  imports: [NgxCmHttpModule
  ],
  exports: [NgxCmLoggerComponent],
  providers: [NgxCmDatabaseLoggerService, NgxCmConsoleLoggerService]
})
export class NgxCmLoggerModule { 
  static forRoot(config: NgxCmLoggerService): ModuleWithProviders {
    return {
      ngModule: NgxCmLoggerModule,
      providers: [
        {provide: NgxCmLoggerService, useClass: config}
      ]
    };
  }
}`

这就是我的模块的样子,如您所见,我提供了两个服务,并且我有 forRoot 方法来实例化我想要用于用例的服务。 `

NgxCmLoggerModule.forRoot(new NgxCmConsoleLoggerService),

` 这就是我试图实例化我的服务的方式,在本例中是控制台记录器。当我尝试这个时,角度告诉我应该由模块提供的 ConsoleLoggerService 不可用。 我很确定我在 forRoot 方法方面做错了什么,我只是不知道是什么。

我很高兴得到任何帮助, 谢谢, 克里斯。

【问题讨论】:

    标签: angular design-patterns service factory provider


    【解决方案1】:

    好吧,我找到了解决问题的方法,可悲的是,这比想象的要容易。我只是错过了我的 public-api typescript 文件的配置。如果不告诉我的模块的公共接口它也允许发布其他日志记录类,它当然不会这样做。 所以也许它可以帮助你们中的一些人,他们也没有看到树木的树木。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-04
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      相关资源
      最近更新 更多