Как внедрить службу в класс, который должен быть создан в модуле приложения в angular 7?

Я использую ngxs в проекте и хочу использовать подключаемый модуль регистратора ngxs, но я хочу переопределить сам регистратор, чтобы я мог войти в бэкэнд. Для этого мне нужно внедрить свой RestService в мой класс регистратора, но я не могу этого сделать. Я видел несколько вопросов, в которых спрашивали, как внедрить службы в простые классы, но эти случаи на самом деле не отвечают на случай, когда вам нужно вручную создать экземпляр класса в модуле приложения. Это, это и this - это такие ответы, которые не помогли мне или я не уловил их знания.

Вот что у меня есть в импорте моего модуля приложения:

export const APP_MODULE_IMPORTS = [
  NgxsModule.forRoot([
    NewsState,
    NewsAdminState,
  ]),
  NgxsReduxDevtoolsPluginModule.forRoot(),
  NgxsLoggerPluginModule.forRoot({
    collapsed: false,
    logger: new Logger(/* Need somehow to have an instance of the RestService HERE without having to pass all other dependencies */)
  }),
  BrowserModule,
  HttpClientModule,
  FormsModule,
  ReactiveFormsModule,
  routing
];

И вот мой класс регистратора:

import { RestService } from 'my-angular-modules';

@Injectable()
export class Logger {

  constructor(private restService: RestService) {
  }

  public log(title, color, payload): void {
    console.log(title, 'title');
    console.log(color, 'color');
    console.log(payload, 'payload');
  }

  public groupCollapsed(message): void {
    console.groupCollapsed(message);
  }

  public group(message): void {
    console.group(message);
  }

  public groupEnd(): void {
    console.groupEnd();
  }
}

Я не могу напрямую передать экземпляр службы отдыха, потому что мне пришлось бы передать каскад зависимостей. Я также пытался использовать токены для инъекций и добавлять { provide: LOGGER_INJECTION_TOKEN, useClass: RestService } к провайдерам, но пришел к тому же. Я не знаю, как в этот момент создать экземпляр класса Logger без передачи этих аргументов, которых у меня нет.

Это вообще возможно? Если нет, то как мне это сделать? Я хочу иметь возможность использовать регистратор ngxs для хранения журналов действий вместо создания пользовательских журналов в компонентах, но для этого мне нужно, чтобы регистратор мог использовать мою службу отдыха.


person António Quadrado    schedule 22.11.2018    source источник


Ответы (1)