flutter - Flutter 可注入抽象类
问题描述
我正在尝试为我的项目使用可注入的,但是当我尝试这部分代码时:
@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 装饰器标记要由 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)
}
推荐阅读
- google-sheets - 你如何获得一个谷歌表格列来更新现有谷歌课堂帖子的成绩?
- r - 错误:在“df”中找不到名为的列
- reactjs - gh-pages 只发布背景图片
- primefaces - IBM AppScan - 盲 SQL 注入(基于时间) - JSF 2.2 和 Primefaces - JBOSS 7.2 EAP
- typescript - 如何在打字稿中定义“set-cookie”为“string []”但任何其他键为“string”的类型?
- r - 用 facet_zoom 放大分类图?
- python - 如何使标签在 python 中的 seaborn 中看起来正常?
- angular - Chrome 是否有类似 Postman 的 SSL 证书验证设置?
- python - 如何检查 Python dict 是否有特定的键
- javascript - 按下回车键时如何使函数执行某些操作