Flutter Provider — Циклические зависимости с использованием ProxyProvider`

У меня есть следующие услуги:

  1. SecuredStorageService()
  2. ApiService({this.authService})
  3. AuthService({this.securedStorageService, this.apiService})
  4. RegisterService({this.apiService, this.securedStorageService})

Что заставило меня написать:

providers: [
  Provider<SecuredStorageService>.value(value: SecuredStorageService()),
  ProxyProvider<AuthService, ApiService>(
    builder: (_, auth, __) => ApiService(authService: auth),
  ),
  ProxyProvider2<ApiService, SecuredStorageService, RegisterService>(
    builder: (_, api, storage, __) => RegisterService(apiService: api, securedStorageService: storage),
  ),
  ProxyProvider2<ApiService, SecuredStorageService, AuthService>(
    builder: (_, api, storage, __) => AuthService(apiService: api, securedStorageService: storage),
  ),
],

Я могу сказать до этого момента, что это уже выглядит грязно. Но это не так. Когда я запускаю приложение, я получаю следующую ошибку:

введите здесь описание изображения

Так что мне делать? Я добавляю перед всеми ProxyProviders Provider<AuthService>. Но тогда AuthService создается дважды! Который теряет весь смысл быть единичным экземпляром (или не так ли?).

Моя главная цель — сделать своего рода инъекцию зависимостей, как в Angular или Laravel.


person Eliya Cohen    schedule 07.07.2019    source источник


Ответы (1)


ProxyProvider и виджеты в целом борются с циклическими зависимостями, так как обычно это признак "спагетти-кода" (узнать больше)

Таким образом, используя ProxyProvider, вы не сможете построить круговой граф зависимостей.

Если это действительно то, что вы хотите, рассмотрите возможность использования Provider.value и ручной обработки ваших зависимостей.

person Rémi Rousselet    schedule 07.07.2019