Flutter Provider-使用ProxyProvider`

时间:2019-07-07 20:53:12

标签: flutter dart circular-dependency flutter-provider

我有以下服务:

  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前添加了Provider<AuthService>。但是,AuthService被构造了两次!哪个失去了成为单个实例的全部意义(不是吗?)。

我的主要目标是像Angular或Laravel一样进行某种依赖注入。

1 个答案:

答案 0 :(得分:1)

ProxyProvider和窗口小部件通常与循环依赖关系作斗争,因为它通常是“意大利面条代码”(see more)的标志

这样,使用ProxyProvider将无法制作循环依赖图。

如果这确实是您想要的,请考虑使用Provider.value并手动处理您的依赖项。