我见过的所有示例都在 State(less/full)Widget 中初始化 ObjectBox。我正在使用分层架构(目前正在重构为 DDD)并且想知道如何正确注入我的 ObjectBox。
在我的存储库中,我使用 injectable 和 getit 包注入数据源
@injectable
@LazySingleton (as: IJournalsRepository)
class JournalsRepository implements IJournalsRepository {
final JournalsRemoteDataSource journalsRemoteDataSource;
final JournalsLocalDataSource journalsLocalDataSource;
JournalsRepository(this.journalsLocalDataSource, this.journalsRemoteDataSource);
然后,这些包创建一个JournalsRemoteDataSource
and of的实例JournalsRemoteDataSource
并将其注入到存储库中。
ObjectBox 示例显示用于初始化
class _MyHomePageState extends State<MyHomePage> {
Store? _store;
@override
void initState() {
super.initState();
openStore().then((Store store) => _store = store;);
}
@override
void dispose() {
_store?.close(); // don't forget to close the store
super.dispose();
}
}
所以我不知道注入器如何初始化 ObjectBox 或者如果我要初始化(在上游) ,我如何objectBox
从注入的对象中访问对象JournalsRemoteDataSource
objectBox
MyApp()
HomePage
PS:JournalsRemoteDataSource
在每个读/写事件上重新打开盒子的性能很差
========== 更新 ========== 补充我对@vaind 的评论
与此同时,我在这个类似问题上找到了你的答案(不知道为什么我最初没有看到它)。我希望这种方法也能在这里发挥作用。但是,我仍然在初始化商店时遇到问题。我的原型来自 Firestore,如下所示:
import 'package:firebase_auth/firebase_auth.dart';
import 'package:injectable/injectable.dart';
@module
abstract class FirebaseInjectableModule {
@lazySingleton
FirebaseAuth get firebaseAuth => FirebaseAuth.instance;
}
虽然我不明白吸气剂的firebaseAuth
来源,也没有找到任何解释。无论如何,我将其调整为
import 'package:injectable/injectable.dart';
import 'package:objectbox/objectbox.dart';
import 'package:test/objectbox.g.dart';
@module
abstract class ObjectboxInjectableModule {
@lazySingleton
Future<Store> get store async => await openStore();
}
并将其与
@LazySingleton (as: ILocalDataSource)
class ObjectBoxDataSource implements ILocalDataSource {
final Store _store;
final Box<JournalOboxEntity> _box;
ObjectBoxDataSource(this._store) : _box = _store.box();
除了final Store _store
在 IntelliJ 中显示为灰色(未使用的变量)之外,我还收到了错误
You tried to access an instance of Store that is not ready yet
'package:get_it/get_it_impl.dart':
Failed assertion: line 404 pos 9: 'instanceFactory.isReady'