flutter 分割线_为Flutter而生的轻量级依赖检索容器—DartIn

DartIn是一个受到Koin启发的Flutter轻量级依赖注入库,旨在简化移动应用开发中的依赖管理。通过简单易用的API,如single、lazy和factory,开发者可以方便地实现全局唯一实例、延迟初始化和按需创建实例。项目已上传到pub,方便集成。作者分享了如何使用DartIn,并表达了对进一步完善该库的计划。
摘要由CSDN通过智能技术生成
6113e9ed7ebe2548b87a4c1e82488e00.png

什么是Flutter?

Flutter 是 Google推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过 Dart语言开发 App,一套代码同时运行在 iOS 和 Android平台。

Flutter官网:https://flutter-io.cn

在学习Flutter一段时间之后,我们已经在实际项目中进行了实践,效果还是蛮不错的:无差的UI、同样的业务逻辑、减少沟通交流的成本、HotReload等等都是令人愿意继续深耕的理由

但于Android/IOS等发展多年、稳定高效的开发模式相比,无疑还处在新生阶段。在编写Dart代码的这段时间中,我尝试将以前的开发经验迁移到Flutter项目中,其中自然也包括依赖注入的思想,但发现社区还没有提供这样的第三方依赖,但实际是有这方面需求的,在google关于flutter第二期的问答中,也提到了相关的问题。

454a65d2650fd79e4557bacec75e1fcf.png

issue

因为以前有写过分析Koin依赖检索原理的文章(当Koin撞上ViewModel),有这方面知识的积累。加上近期在运用flutter-provide进行状态管理的过程中发现provide稍加改进便可以化身为一个依赖注入框架,于是我便动手进行了这方面的改造。

DartIn

灵感来自于Koin(一个为Kotlin开发者提供的轻量级依赖检索容器)。

用法也跟Koin类似,代码总共就261行(包括注释),易于使用也方便理解。

github地址:https://github.com/ditclear/dartin

dartin已经上传到pub,方便Flutter开发者集成。

dependencies: dartin: ^0.0.1

一些关键的方法:

  • single:创建一个提供全局唯一的实例的provider。
  • lazy:创建一个provider,当第一次使用到它的时候才会创建实例。
  • factory:创建一个provider,每次都会提供新的实例。
  • inject:注入对象

更多信息可以查看dartin.dart。

快速开始

创建Module,配置依赖

//scope 必须是全局的,并且是静态不可变的const test = DartInScope('test');//在Module构造方法中定义的依赖配置会放到默认的作用域_defaule中final viewModelModule = Module([ factory(({params}) => HomeProvide(params.get(0), get())),]) ..addOthers(test , [ ///other scope factory(({params}) => HomeProvide(params.get(0), get())), ]);final repoModule = Module([ lazy(({params}) => GithubRepo(get())),]);final remoteModule = Module([ single(GithubService()),]);final appModule = [viewModelModule, repoModule, remoteModule];

2 . 加载配置项到dartins

void main() { startDartIn(appModule); runApp(MyApp());}

3 .进行依赖检索注入实例

//注入一个简单的实例final service = inject();//动态提供参数final test = inject(params: ['title']);//根据scope提供不同的实例final test = inject(scope:test, params: ['title']);

更多的例子可以查看 https://github.com/ditclear/mvvm_flutter

原理很简单,总的来说就是一个依赖容器Map,key为配置的依赖类型,值为封装的一层Provider。

factory(({params}) => HomeProvide(params.get(0), get()))Key 就是 HomeProvider , 值是factory返回的一个Provider

当需要获取实例的时候,通过需要实例的runtimeType,通过Provider.get()方法根据是single/lazy/factory去提供相应的实例,所以记住写好很重要。

写在最后

DartIn是站在巨人肩膀上的产物,功能有了,但和Koin这种框架比较起来还有许多需更进一步,包括完善的单元测试、类型安全、更合理的提示,依赖构建的路径提供,今后我也将持续完善它,也希望能抛砖引玉,早日出现更好的依赖注入框架。

最后 welcome to star、 fork and pull request.

==================== 分割线 ======================

如果你想了解更多关于MVVM、Flutter、响应式编程方面的知识,欢迎关注我。

你可以在以下地方找到我:

简书:https://www.jianshu.com/u/117f1cf0c556

掘金:https://juejin.im/user/582d601d2e958a0069bbe687

Github: https://github.com/ditclear

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值