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

2025年中秋月亮只有94.91%圆?Python告诉你真相

2025年中秋月亮只有94.91%圆?Python告诉你真相

前言: 又是一年中秋节,祝大家中秋快乐!作为程序员的我们,还有谁和我一样在外奔波而不能回家,想和大家说一声辛苦啦!既然不能回家吃月饼、赏明月,那我是不是也能用代码写下属于自己的中秋记忆,为朋友们送去我们自己特殊的中秋祝福,让技术和传统节日碰撞出新的火花。 本文目录: * 一、月相计算:今晚的月亮到底有多圆 * 1. 月相可视化 * 二、月饼切分算法:公平分配的艺术 * 1. 经典切分策略 * 2. 进阶问题:不过圆心的切分 * 三、诗词生成:中秋凑诗 * 四、月球数据可视化:用数据看月亮 * 1. 先画月球表面:模拟环形山地形 * 2. 再做月相动画:看一个月月亮怎么变 * 五、中秋快乐,记得吃月饼🥮 * 写在最后 一、月相计算:今晚的月亮到底有多圆 今天是中秋节,刷朋友圈的时候突然想到一个问题:今年中秋的月亮到底有多圆?作为Python开发者,我决定用代码来算一算。顺便整理了几个和中秋相关的有趣项目,

By Ne0inhk

PyCharm 完全指南:Python 开发者的首选集成开发环境

目录 引言 一、PyCharm 概述与核心价值 二、里程碑式更新:统一版本与许可模式 三、核心功能深度剖析 1. 智能代码辅助 2. 高效的导航与搜索 3. 无缝的 Web 开发支持(Pro 版) 4. 内置工具与集成 四、新版本亮点:PyCharm 2025.x 五、如何开始:安装与第一个项目 1. 安装与环境准备 2. 创建并运行你的第一个项目 六、结语 引言 在 Python 开发的世界里,选择一款顺手的代码编辑器往往能事半功倍。而提到 Python 集成开发环境(IDE),PyCharm 无疑是一个绕不开的名字。这款由 JetBrains 公司打造的

By Ne0inhk

StarUML(6.3.3)2025-10-24更新!下载、破解、汉化及搭建C++扩展,从0到1全攻略教程(Windows11)

-1#主包作为第一次配StarUML环境可谓是吃进苦头,像无头苍蝇般,这里无偿分享给大家,如何从0到1实现汉化、破解、及解决软件c++扩展下载失败的问题 1.StartUML的下载 1.1官网网址: StarUMLhttps://staruml.io/ 1.2进去后按照此: 1.3然后点击运行,其正常界面如(代表下载成功): 2.StartUML的汉化及破解 2.1找到StartUML的安装目录(如1.2可知,一般在C盘的Program Files里) 在其根目录下找到 resources(如图): 2.2进入resources文件夹,找到 app.asar: 2.3 访问此网址: https://github.com/X1a0He/StarUML-CrackedAndTranslatehttps://github.com/X1a0He/StarUML-CrackedAndTranslate  进去之后点击

By Ne0inhk
AutoGPT+Python:让AI智能体自动完成复杂任务的终极指南

AutoGPT+Python:让AI智能体自动完成复杂任务的终极指南

AutoGPT+Python:让AI智能体自动完成复杂任务的终极指南 引言:在人工智能迈向自主化的新阶段,AutoGPT作为基于大语言模型(LLM)的自主智能体代表,正掀起一场让AI自己思考、自主执行的技术革命。当它遇上Python的全栈生态与极致灵活性,开发者不再只是调用AI接口,而是能深度定制专属智能体——让AI听懂自然语言、拆解复杂目标、调用外部工具、联网检索信息、迭代优化结果,独立完成从市场调研、内容创作、代码开发到自动化运维的全流程任务。 本文从核心原理、本地部署、Python实战、插件扩展、生产优化五大维度,手把手带你从0到1搭建可落地、可监控、可进化的AI智能体系统,不管是AI爱好者、全栈开发者还是创业者,都能靠这份指南,掌握下一代人机协作的核心生产力。 一、先搞懂:AutoGPT到底是什么? 传统ChatGPT类模型是被动应答,你问一句它答一句,需要人工一步步引导;而AutoGPT是自主智能体,你只给它一个最终目标,它就能自己完成: * 任务拆解:把复杂目标拆成可执行子步骤 * 自主决策:判断下一步该做什么、调用什么工具 * 记忆管理:短期记忆存上下文

By Ne0inhk