Flutter for OpenHarmony:flutter_simple_dependency_injection — 解耦应用架构的神器

Flutter for OpenHarmony:flutter_simple_dependency_injection — 解耦应用架构的神器

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

在这里插入图片描述

前言

随着鸿蒙工程复杂度的提升,由于“硬编码”依赖导致的架构臃肿会显著增加后期维护成本。flutter_simple_dependency_injection 提供了一种轻量级的 DI 方案,通过中立的“注入器”管理组件生命周期,实现各层级代码的深度解耦。

一、核心价值

1.1 基础概念

依赖注入的核心思想是:“不要自己去找桶,而是让别人把水送过来”

实例化并持有

实例化并持有

请求实例

自动注入依赖

Injector 容器

ApiService

AuthRepository

鸿蒙 UI 页面

1.2 进阶概念

  • Singleton (单例):整个应用生命周期内只有一个实例,非常适合鸿蒙的数据库连接或全局配置。
  • Factory (工厂):每次获取时都创建一个新对象,适合每个页面独立的逻辑控制器(Controller)。
  • Inject (手动注入):在无法通过构造函数注入的地方(如:第三方组件内部),手动从容器取值。

二、核心 API / 组件详解

2.1 容器配置

在鸿蒙应用启动时(如 main.dart 之前),统一规划依赖地图。

import'package:flutter_simple_dependency_injection/injector.dart';voidsetupHarmonyInjections(){final injector =Injector.getInjector();// ✅ 推荐做法:注册全局单例 injector.map<HarmonyApiService>((i)=>HarmonyApiService(), isSingleton:true);// ✅ 注册需要自动装配的 Repository injector.map<AuthRepository>((i){// 💡 技巧:i.get<T>() 会自动寻找已注册的依赖returnAuthRepository(i.get<HarmonyApiService>());});}
在这里插入图片描述

2.2 实例获取

final authRepo =Injector.getInjector().get<AuthRepository>();
在这里插入图片描述

三、场景示例

3.1 场景一:模拟单元测试中的 Mock 注入

当我们想在预览模式或真机测试环境下替换真实的支付接口,而不用改动任何 UI 代码时。

import'package:flutter_simple_dependency_injection/injector.dart';// 接口定义abstractclassPayService{voidpay();}// ✅ 策略:根据是否在测试环境注入不同实现voidsetupPayDI(bool isTest){final injector =Injector.getInjector();if(isTest){ injector.map<PayService>((i)=>MockPayService());// 注入模拟器用的支付}else{ injector.map<PayService>((i)=>RealHarmonyPayService());// 注入真机支付}}
在这里插入图片描述

四、OpenHarmony 平台适配挑战

4.1 容器的跨 UI 容器共享

在鸿蒙的分屏(Multi-Window)或多个 Ability 渲染同一个 Flutter 视图时,确保 Injector 的单例对象能被正确管理。

适配策略建议

  1. 统一初始化:在鸿蒙 HAP 的入口 Ability 中早期触发 setupInjections
  2. 避免循环依赖:如果 A 依赖 B,B 也依赖 A,DI 容器会报错导致鸿蒙应用崩溃。请通过定义接口(抽象类)来打破环路。
// 💡 最佳实践:使用接口来降低适配耦合 injector.map<LoggerInterface>((i)=>HarmonyProductionLogger());
在这里插入图片描述

五、综合实战示例代码

这是一个完整的鸿蒙用户中心解耦示例:

import'package:flutter/material.dart';import'package:flutter_simple_dependency_injection/injector.dart';// 1. 服务定义classHarmonyUserService{StringgetWelcomeMsg()=>"欢迎回到鸿蒙生态系统!";}// 2. 注入配置voidconfigDI(){Injector.getInjector().map<HarmonyUserService>((i)=>HarmonyUserService());}// 3. UI 使用classHarmonyUserPageextendsStatelessWidget{HarmonyUserPage({super.key}){// 💡 重点:这里不需要 new UserService,而是从容器拿 _service =Injector.getInjector().get<HarmonyUserService>();} late finalHarmonyUserService _service;@overrideWidgetbuild(BuildContext context){returnScaffold( appBar:AppBar(title:constText('DI 解耦架构实战')), body:Center( child:Column( children:[constIcon(Icons.verified_user, size:80, color:Colors.blue),Text(_service.getWelcomeMsg(), style:constTextStyle(fontSize:18)),],),),);}}
在这里插入图片描述

六、总结

flutter_simple_dependency_injection 是构建高质量鸿蒙应用不可或缺的基石。通过将对象的生命周期与业务逻辑剥离,你的代码将变得异常“易于测试”且“易于更换”。

核心建议

  1. 始终使用 final injector = Injector.getInjector() 获取全局默认容器。
  2. 每一个 Service 对应的 UI 交互,都尝试通过 DI 传入,而不是在 UI 内部 new。

Read more

破局海量日志噪音:基于 Rust + DeepSeek 实现微服务级联故障的精准定位与自动化修复

破局海量日志噪音:基于 Rust + DeepSeek 实现微服务级联故障的精准定位与自动化修复

目录 * 摘要 * 第一章 系统背景与技术选型 * 1.1 运维可观测性的挑战 * 1.2 为什么选择 Rust * 1.3 为什么选择 DeepSeek V3.2 * 第二章 环境准备与基础设施搭建 * 2.1 模型服务接入 * 2.2 Rust 项目初始化 * 2.3 依赖管理与生态集成 * 第三章 核心架构设计与模块实现 * 3.1 模块化设计理念 * 3.2 主程序控制流 (main.rs) * 3.3 异常检测引擎 (anomaly_detector.rs) * 3.4 诊断引擎与报告生成 (diagnostic_engine.

By Ne0inhk
Rust 性能优化实战:从 unsafe 使用到 SIMD 指令,让服务端响应快 2 倍

Rust 性能优化实战:从 unsafe 使用到 SIMD 指令,让服务端响应快 2 倍

文章目录 * Rust 性能优化实战:从 unsafe 使用到 SIMD 指令,让服务端响应快 2 倍 🚀 * 起点:一个“慢”但正确的服务端实现 🐢 * 第一步:性能剖析——找到真正的瓶颈 🔍 * 使用 `perf`(Linux)或 `Instruments`(macOS) * 使用 `flamegraph` 可视化 * 第二步:减少内存分配与拷贝 🧹 * 优化 1:使用 `Cow` 避免不必要的字符串拷贝 * 优化 2:预分配 Vec 容量 * 第三步:引入 SIMD 加速 JSON 解析 ⚡ * 第四步:向量化求和——手动使用 SIMD 指令

By Ne0inhk
MySQL查看命令速查表

MySQL查看命令速查表

🎬 个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录》 《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》 ⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平 🎬 艾莉丝的简介: 文章目录 * 1 ~> MySQL 查看类命令大全 * 1.1 查看数据库 * 1.2 查看表 * 1.3 查看数 * 1.4 查看用户 / 权限 * 1.5 最常用组合(截图里就是这套) * 2 ~> MySQL常用核心命令速查表 * 2.1 MySQL 常用核心命令速查表 * 2.

By Ne0inhk