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)
这是有效的,但我不会通过使用它们的抽象类来访问它们(如果可能的话)
有人能帮我吗?
您可以通过提供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)
| 归档时间: |
|
| 查看次数: |
2441 次 |
| 最近记录: |