Вставить хранилище в класс обработчика ошибок Angular - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь реализовать часовую обработку ошибок в моем приложении, теперь она настроена и работает как положено ... но теперь я хочу иметь возможность передавать пользовательскую информацию об объекте Sentry для лучшей регистрации ошибок.

Итак, у меня есть следующая настройка

export class SentryErrorHandler implements ErrorHandler {
   userInfo: UserInfo;

   constructor(
     private _store: Store<AppState>
   ) {
     this.getUserInfo();
   }

   getUserInfo() {
    this._store.select('userInfo')
      .subscribe(result => {
        this.userInfo = result;
      });
  }

  handleError(err: any): void {
    Sentry.configureScope((scope) => {
      scope.setUser({
        email: this.userInfo?.emailAddress,
        id: this.userInfo?.id?,
      });
    });
    const eventId = Sentry.captureException(err.originalError || err);
    Sentry.showReportDialog({ eventId });
  }
}

, и я предоставляю обработчик ошибок, как в моем root модуле

// ...
{ provide: ErrorHandler, useClass: SentryErrorHandler }
// ...

, но что происходит, когда я запускаю В моем приложении я получаю следующую ошибку

enter image description here

Очевидно, что я делаю что-то здесь не так, любая помощь будет оценена!

1 Ответ

0 голосов
/ 11 марта 2020

Эта ошибка возникает из-за того, что без @Injectable декоратор Angular не может подключить зависимости для класса (даже используя его в провайдерах).

Поэтому все, что вам нужно сделать, это добавить @Injectable() decorator в вашем классе ошибок.

См. демонстрацию здесь: https://stackblitz.com/edit/angular-ctutia

...