Как найти круговую зависимость между модулями в приложении React Native? - PullRequest
0 голосов
/ 22 января 2020

У меня есть приложение React Native со многими инъекционными модулями и магазинами. В настоящий момент я получаю сообщение об ошибке: @inject вызывается с неопределенным значением, это может означать, что у класса ScreenInstrumentSearchVM есть проблема циклической зависимости. Вы можете использовать LazyServiceIdentifier, чтобы преодолеть это ограничение. И этот класс имеет следующую зависимость:

  constructor(
    @Inject(IReportServiceTid) private _reportService: IReportService,
    @Inject(INavigationManagerTid) private _navigation: INavigationManager,
    @Inject(ISearchPreferencesTid) private _preferences: ISearchPreferences,
    @Inject(IErrorHandlerServiceTid) private _errorHandler: IErrorHandlerService,
    @Inject(INotificationServiceTid) private _notification: INotificationService,
    @Inject(ILoggerServiceTid) private _log: ILogger
  ) {}

Мои шаги были:

1) Я проверил все эти модули и попытался найти циклическую зависимость между собой, но не нашел ее:

Зависимость ReportService: ApiEndPointProvider, ApiTokenProvider, HttpClientFactory.

Зависимость NavigationManager: LoggerService.

Зависимость LogerService: IConstService.

* зависимость *. * 1013 1014 *

Зависимость предпочтений: нет DI.

Зависимость ErrorHandler: LoggerService, NotificationService.

Зависимость NotificationService: Нет DI.

2) Второй шаг был в соответствии с эту статью https://github.com/inversify/InversifyJS/blob/master/wiki/circular_dependencies.md изменить на InjectLazy:

  constructor(
    @InjectLazy(IReportServiceTid) private _reportService: IReportService,
    @InjectLazy(INavigationManagerTid) private _navigation: INavigationManager,
    @InjectLazy(ISearchPreferencesTid) private _preferences: ISearchPreferences,
    @InjectLazy(IErrorHandlerServiceTid) private _errorHandler: IErrorHandlerService,
    @InjectLazy(INotificationServiceTid) private _notification: INotificationService,
    @InjectLazy(ILoggerServiceTid) private _log: ILogger
  ) {}

Но все эти шаги у меня не сработали. Можете ли вы порекомендовать мне, пожалуйста, как я могу обнаружить эту циклическую зависимость и решить мою ошибку?

...