我们使用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()
等。