Flutter Provider - Круговые зависимости с использованием ProxyProvider` - PullRequest
1 голос
/ 07 июля 2019

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

  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),
  ),
],

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

enter image description here

И что мне делать?Я добавляю перед всеми ProxyProvider sa Provider<AuthService>.Но тогда AuthService создается дважды!Что лишает смысла быть единичным экземпляром (или не так?).

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

1 Ответ

1 голос
/ 08 июля 2019

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

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

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

...