0

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

@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

无法理解我错过了什么。

4

1 回答 1

1

@injectable 装饰器标记要由 di(依赖注入)包处理的类。

di 应该在您稍后要求时为您提供此类的实例。但是您还将该类标记为“抽象”并且无法实例化抽象类。

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

@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)  
}
于 2021-10-05T11:47:44.327 回答