获取Flutter多个抽象类注册

4
我们正在使用 get_it:^7.1.3 包进行依赖注入。 我想要注册一些与同一个抽象类相关的类(就像它们是接口一样),并像下面这样获取它们: List allClassesWhichImplementAbstractClass=di.sl.get(); 因此,我希望以以下方式进行注册:
  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());

这样做是可行的,但如果可能的话,我将无法通过使用它们的抽象类来访问两者。

有人能帮帮我吗?

2个回答

6

您可以通过提供instanceName参数来完成:

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

同样使用相同的名称:

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

-1

由于其单例行为,您只能使用registerLazySingleton()注册一个对象。

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


但是,你如何获得你想要的实例呢? - Acácio Veit Schneider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接