Get_It Flutter 多个抽象类注册

Dan*_*ser 6 dependency-injection flutter

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

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

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

  sl.registerLazySingleton<AbstractLass>(() =>
  AbstractLassImpl1());
  sl.registerLazySingleton<AbstractLass>(() =>
  AbstractLassImpl2());
Run Code Online (Sandbox Code Playgroud)

但当我这样做时,我会得到一个例外:

ArgumentError (Invalid argument(s): Object/factory with  type AbstractLass is already registered inside GetIt. )
Run Code Online (Sandbox Code Playgroud)

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

  sl.registerLazySingleton<AbstractLassImpl1>(() =>
  AbstractLassImpl1());
  sl.registerLazySingleton<AbstractLassImpl2>(() =>
  AbstractLassImpl2());
Run Code Online (Sandbox Code Playgroud)

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

有人能帮我吗?

Des*_*vic 9

您可以通过提供instanceName参数来做到这一点,如下所示:

sl.registerLazySingleton<AbstractClass>(() =>
  AbstractClassImpl1(), instanceName: 'implementation1');
sl.registerLazySingleton<AbstractClass>(() =>
  AbstractClassImpl2(), instanceName: 'implementation2');
Run Code Online (Sandbox Code Playgroud)

并使用它也具有相同的名称:

sl.get<AbstractClass>(instanceName: 'implementation1');
Run Code Online (Sandbox Code Playgroud)