Get_It Flutter多个抽象类注册



我们使用get_it:^7.1.3包进行依赖注入。我想注册一些类与相同的抽象类(像他们是接口),并得到他们像:

List<AbstractLass> allClassesWhichImplementAbstractClass=di.sl.get<AbstractLass>();

因此,我想以以下方式注册它:

sl.registerLazySingleton<AbstractLass>(() =>
AbstractLassImpl1());
sl.registerLazySingleton<AbstractLass>(() =>
AbstractLassImpl2());

但是当我这样做的时候,我将得到一个异常:

ArgumentError (Invalid argument(s): Object/factory with  type AbstractLass is already registered inside GetIt. )

还有另一种解决方案,我以以下方式注册实现:

sl.registerLazySingleton<AbstractLassImpl1>(() =>
AbstractLassImpl1());
sl.registerLazySingleton<AbstractLassImpl2>(() =>
AbstractLassImpl2());

可以工作,但是我不会通过使用它们的抽象类(如果可能的话)来访问它们

有人能帮帮我吗?

您可以像这样提供instanceName参数:

sl.registerLazySingleton<AbstractClass>(() =>
AbstractClassImpl1(), instanceName: 'implementation1');
sl.registerLazySingleton<AbstractClass>(() =>
AbstractClassImpl2(), instanceName: 'implementation2');

和使用它也包括相同的名称:

sl.get<AbstractClass>(instanceName: 'implementation1');

由于registerLazySingleton()的Singleton行为,您只能使用它注册一个对象。

如果您想用不同的实现注册多个接口,请尝试使用registerFactory()等。

最新更新