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)
}
我正在尝试为我的项目使用可注射剂,但是当我尝试这部分代码时:
@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)
}