Angular - 如何与组件的解析器共享组件中提供的服务?

Angular - How to share a service provided in component with the component's resolver?

我有一个 Messenger 组件,组件本身提供消息服务(因为它需要特定于组件):

@Component({
  selector: "app-messenger",
  templateUrl: "./messenger.page.html",
  styleUrls: ["./messenger.page.scss"],
  providers: [MessagesService],
})

在转换到 Messenger 组件之前,我需要加载我的消息(在消息服务中完成),因此我使用解析器 (messagesResolver)。 messagesService 包含消息,因此解析器需要访问与 messengerComponent.

相同的 messagesService 实例

我该怎么做?

我目前收到来自解析器的错误:

NullInjectorError: R3InjectorError(MainPageModule)[MessagesResolver -> MessagesResolver -> MessagesService -> MessagesService -> MessagesService]: 
  NullInjectorError: No provider for MessagesService!

我从其他 Stack Overflow 问题中了解到我可以 Angular 的 Injector?但是我不知道该怎么办。

解析器注意事项:

{
    path: "messenger/:chatID",
    loadChildren: () =>
      import("./chats/messenger/messenger.module").then((m) => m.MessengerPageModule),
    resolve: {
      messages: MessagesResolver,
    },
  },

使用 factory 将允许您访问 servicescomponentspropertiesfunctions 等一个特定的服务被创建。这允许您在创建服务后稍微修改创建过程,例如将值分配给 属性.

@Component({
  providers: [{
    provide: MessagesService, 
    useFactory: (messageResolver: MessageResolver) => messageResolver.msgService, 
    deps: [MessageResolver]
  }]
})
export class MessengerComponent {

}