Flutter 可注入摘要 class

Flutter injectable abstract class

我正在尝试为我的项目使用可注射剂,但是当我尝试这部分代码时:

@injectable
abstract class TodoRepository {
  Future<Either<Failure, DayTodosEntity>> getDayDodo(DateEntity date);
}  

run build_runner 之后出现此错误:

[TodoRepository] is abstract and can not be registered directly! 
if it has a factory or a create method annotate it with @factoryMethod

不明白我错过了什么。

@injectable 装饰器标记 class 将由 di(依赖注入)包处理。

di 应该会在您稍后请求时为您提供此 class 的实例。但是您也将 class 标记为“抽象”并且抽象 classes 无法实例化。

如果这个抽象只有一个实现,你只需要为实现添加装饰器

@Injectable(as: AbstractClass) 
class ConcreteClass implements AbstractClass {}

如果您有多个实现,您可以通过

实现
@Named("impl1")  
@Injectable(as: AbstractClass)  
class ConcreteClassImpl1 implements AbstractClass {}  
  
@Named("impl2")  
@Injectable(as: AbstractClass)  
class ConcreteClassImpl2 implements AbstractClass {} 

使用预期的实现

@injectable  
class Consumer {  
   final AbstractClass abstractClass;  
    Consumer(@Named('impl1') this. abstractClass)  
}