【发布时间】:2021-02-04 04:13:50
【问题描述】:
我正在尝试使用 get_it 在我的颤振应用程序中注册我的服务,并且需要在开始时使用异步调用初始化一个依赖项。
正如我在official Get_It pub page 上所读到的,这应该不是问题,只要我为依赖于该可初始化类的依赖项定义dependOn 属性即可。
在我的例子中,DeviceInfo 是需要初始化的类,Gateway 和 WorkingTimeRepository 都依赖于这个类。两者都定义了它们的dependOn 属性。
void setup() {
getIt.registerSingletonAsync<DeviceInfo>(() async => DeviceInfo.init());
getIt.registerSingletonWithDependencies(
() => Gateway(deviceInfo: getIt.get()),
dependsOn: [DeviceInfo]);
getIt.registerSingletonWithDependencies<WorkingTimeRepository>(
() => WorkingTimeRepository(
dio: new Dio(), httpHeader: new HttpHeader(), gateway: getIt.get()),
dependsOn: [DeviceInfo, Gateway]);
}
现在当我的应用程序启动并且我的第一个 Widget 想要访问 WorkingTimeRepository 时,我立即得到一个异常:
════════小部件库捕获的异常═════════════════════════════════════ ═ 在构建 MainView 时抛出了以下断言: 您尝试访问尚未准备好的 WorkingTimeRepository 实例 '包:get_it/get_it_impl.dart': 断言失败:第 322 行第 14 行:'instanceFactory.isReady'
我找不到我做的错误,我还以为访问注册的类型时,它会解决所有依赖项
有人知道这里缺少什么吗?
【问题讨论】:
-
您的 DeviceInfo 注册是异步的,当您的第一个小部件想要访问它时,它可能尚未注册。
-
是的,看起来,bit get_it 提供了一个名为 dependsOn 的参数,您可以在其中定义将首先解决的异步依赖项。我还按照文档中的描述实现了它,但没有成功
标签: flutter dart dependency-injection