Flutter for OpenHarmony:injector 轻量级依赖注入库(比 GetIt 更简单的选择) 深度解析与鸿蒙适配指南

Flutter for OpenHarmony:injector 轻量级依赖注入库(比 GetIt 更简单的选择) 深度解析与鸿蒙适配指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net

在这里插入图片描述

前言

依赖注入(Dependency Injection, DI)是解耦架构的核心。
在 Flutter 社区,get_it 是当之无愧的霸主,但有时候我们想要一个更简单、没有 Service Locator 模式那种“全局单例”味道的库,或者需要一个支持模块化注入的方案。

injector 是一个非常轻量的 DI 库。它不使用代码生成,提供基于构建器(Builder)的依赖注册机制。

对于 OpenHarmony 开发者,使用 DI 库可以将鸿蒙特定的实现(如 OhosPermissionService)与通用业务逻辑解耦,实现一套代码,多端运行。

一、核心原理

injector 的工作原理非常纯粹:它维护了一个 Map,Key 是类型,Value 是构建该类型的工厂函数。

map

get()

Singleton

Factory

注册阶段

Injector 容器

检查缓存?

返回单例

创建新实例

业务代码

二、OpenHarmony 适配说明

injectorPure Dart 库,100% 兼容 OpenHarmony
它非常适合用来屏蔽鸿蒙与 Android/iOS 的 API 差异。

架构建议
定义一个抽象类 PermissionService,然后在 Android 上注册 AndroidPermissionImpl,在鸿蒙上注册 OhosPermissionImpl

三、基础用例

3.1 获取实例

injector 默认提供了一个全局单例 Injector.appInstance

import'package:injector/injector.dart';classDatabase{voidopen()=>print('DB opened');}voidsetup(){final injector =Injector.appInstance;// 注册为单例 injector.registerSingleton<Database>(()=>Database());}voidmain(){setup();// 获取实例final db =Injector.appInstance.get<Database>(); db.open();}
在这里插入图片描述

3.2 依赖其他依赖

classApiService{}classUserRepository{finalApiService api;finalDatabase db;UserRepository(this.api,this.db);}voidsetupComplex(){final injector =Injector.appInstance; injector.registerSingleton<ApiService>(()=>ApiService());// 在注册回调中,使用 injector 获取其他依赖 injector.registerDependency<UserRepository>((){returnUserRepository( injector.get<ApiService>(), injector.get<Database>(),);});}
在这里插入图片描述

四、完整实战示例:鸿蒙多环境适配

这个示例展示了如何使用 injector 来根据当前运行环境(Mock环境 vs 鸿蒙真机环境)注入不同的服务实现。这在开发阶段非常有用,可以让你在没有真机的情况下开发业务逻辑。

import'package:injector/injector.dart';// 1. 定义抽象接口abstractclassDeviceInfoService{StringgetOSName();}// 2. 鸿蒙真机实现classOhosDeviceInfoServiceimplementsDeviceInfoService{@overrideStringgetOSName()=>'OpenHarmony 5.0';}// 3. 模拟环境实现classMockDeviceInfoServiceimplementsDeviceInfoService{@overrideStringgetOSName()=>'Mock OS';}// 4. DI 配置类classDependencyConfig{staticvoidconfigure({bool isMock =false}){final injector =Injector.appInstance;// 清理旧的(支持热重载) injector.clearAll();if(isMock){print('🔧 注入 Mock 服务'); injector.registerSingleton<DeviceInfoService>(()=>MockDeviceInfoService());}else{print('📱 注入真实鸿蒙服务'); injector.registerSingleton<DeviceInfoService>(()=>OhosDeviceInfoService());}}}// 5. 业务页面classHomePage{voidshowInfo(){// 业务代码只依赖抽象接口,不关心具体是谁final service =Injector.appInstance.get<DeviceInfoService>();print('当前系统: ${service.getOSName()}');}}voidmain(){// 场景 A: 单元测试或电脑运行DependencyConfig.configure(isMock:true);HomePage().showInfo();// 输出: Mock OSprint('--- 切换环境 ---');// 场景 B: 鸿蒙真机运行DependencyConfig.configure(isMock:false);HomePage().showInfo();// 输出: OpenHarmony 5.0}
在这里插入图片描述

五、总结

injector 虽然不如 get_it 功能繁多,但胜在简单直观
对于中小型 OpenHarmony 项目,或者想要快速验证原型,injector 提供的“注册-获取”模式没有任何样板代码负担。

掌握 DI 思想,是写出可测试、可维护鸿蒙应用的第一步。

Read more

公路病害智能检测的数据基石:主流开源数据集全景与应用洞察

摘要 道路基础设施的健康状况直接关系到交通安全、通行效率与养护成本。随着计算机视觉与深度学习技术的突破,基于图像的自动化道路病害检测已成为研究和应用的前沿。然而,算法的性能高度依赖于高质量、大规模的训练数据。本文旨在系统性地梳理和评述当前全球范围内主流的公开公路病害检测数据集,包括其演进历程、技术特点、适用场景及面临的挑战。通过重点分析以RDD系列为代表的跨国基准数据集、以SVRDD为代表的新型街景数据集,以及其他区域性数据集(如CNRDD、IRRDD),本文为研究者和工程人员选择与利用数据集提供清晰的指南,并展望未来数据建设的方向。 1. 引言:从人工巡检到数据驱动的智能检测 传统道路养护严重依赖人工巡检,存在效率低、主观性强、风险高且难以持续量化等问题。自动化病害检测技术,尤其是基于深度学习的目标检测方法,为解决这一痛点带来了革命性希望。然而,深度学习模型是“数据饥饿型”模型,其泛化能力和鲁棒性从根本上取决于训练数据的质量、多样性和规模。因此,围绕公路病害检测任务构建公开、标准化的数据集,对于推动算法创新、建立公平的性能基准、促进技术落地至关重要。 过去几年,全球的研究机

By Ne0inhk
WIN7系统下Git的安装与配置

WIN7系统下Git的安装与配置

·Git下载 官网地址:Git - Install for Windows (git-scm.com) github:https://github.com/git-for-windows/git/releases 打开github页选历史版本,根据自己电脑选32或64位,此处我选择Git for Windows 2.31.0版本下载 Git 2.35.2(2022 年发布)是官方明确支持 Windows 7 的最后一个版本。后续版本(如 Git 2.36+)逐步放弃对 Windows 7 的兼容性支持 ·Git安装 安前须知:git安装实则大部分情况下都是无脑下一步安装即可,所以安装前可跳过以下步骤,直接安装完毕,第一次安装或感兴趣的同学可以根据以下步骤一步步安装。 选择自己创建的文件夹,

By Ne0inhk
【Linux学习笔记】git三板斧

【Linux学习笔记】git三板斧

🌟个人主页:努力学习的小汤   🌈专栏系列:linux 目录 ❄️前言: ☀️版本控制器git ☀️git简史 ☀️git三板斧 ⭐gitee创建仓库并克隆到本地 ⭐1. git add ⭐2. git commit ⭐3. git push ⭐4. 首次使用git ☀️git其他操作 ⭐git status ⭐git log ⭐git pull ☀️本章小结: 🌻共勉: ❄️前言:  上一篇博客我们学习了make和makefile自动化构建工具,今天我们来学习一下git的三板斧。 ☀️版本控制器git 为了我们方便管理不同版本的文件,就有了版本控制器; 所谓的版本控制器,就是能够了解到一个文件的历史记录(修改记录);简单来说就是记录每一次的改动和版本迭代的一个管理系统,同时也方了多人进行协作。 当前应用最广泛的版本控制器就是git,git可以控制电脑上所有格式的文件。 之前我们在windows下使用git来管理自己的本地文件,并上传至gitee; ☀️git简史 同生活中的许多伟大事物一样,Git 诞生于一个极

By Ne0inhk
手把手教你GitHub访问加速的8种姿势(亲测有效版)

手把手教你GitHub访问加速的8种姿势(亲测有效版)

文章目录 * 一、为什么我的GitHub比蜗牛还慢?(真实原因大揭秘) * 二、8大加速方案实测对比(附成功率评分) * 方案1:镜像站大法(成功率⭐️⭐️⭐️⭐️) * 方案2:Hosts文件改造术(成功率⭐️⭐️⭐️⭐️⭐️) * 方案3:SSH协议加速(成功率⭐️⭐️⭐️) * 方案4:Git配置全局代理(程序员必备) * 方案5:油猴脚本加持(小白神器) * 方案6:CDN加速黑科技 * 方案7:DevSidecar工具(一键加速) * 方案8:终极方案——Gitee中转 * 三、各方案适用场景对比表 * 四、个人私藏加速方案(2023最新) * 五、冷知识:GitHub官方加速通道 * 六、常见问题解答 一、为什么我的GitHub比蜗牛还慢?(真实原因大揭秘) 每次打开GitHub都要转圈半小时?clone代码速度只有10kb/s?这其实是典型的"网络迷航症"

By Ne0inhk