Flutter for OpenHarmony 实战:使用 Injectable 实现自动化依赖注入
前言
在维护 Flutter for OpenHarmony 商业级项目时,随着功能重叠与模块解耦的需求增加,代码库中往往会充斥着大量的 Service、Repository 及 Bloc/ViewModel。如果采用手动实例化这些类并逐层透传,代码会迅速演变成难以维护的'意大利面条'。
依赖注入 (Dependency Injection, DI) 是解决该问题的业界公认方案。而 Injectable 配合 GetIt,则是 Dart 生态中实现 DI 的成熟方案。它能通过极其简洁的注解,在编译期自动生成复杂的注册代码。本文将带你探索如何利用 Injectable 构建一个灵活适配鸿蒙多运行环境的高级架构。
一、为什么 Injectable 是鸿蒙项目的必选项?
1.1 依赖管理的解耦
当 A 类依赖 B、B 依赖 C 时,手动初始化需要严格管理顺序。Injectable 会自动计算依赖图谱,确保组件按需且按序初始化,减少人为失误。
1.2 平台抽象的'无感切换'
鸿蒙系统(OpenHarmony)与原生 Android/iOS 的底层能力(如 Preference、传感器)接口各异。通过 DI,我们可以在接口上编写代码,在运行时根据当前是否为鸿蒙平台注入具体的 Native 实现,从而实现'代码写一次,各处皆适配'。
二、配置环境 📦
在鸿蒙工程的 pubspec.yaml 中,我们需要配置基础库及生成器:
dependencies:
get_it: ^7.2.0
injectable: ^2.3.2
dev_dependencies:
injectable_generator: ^2.4.1 # 编译时代码生成器
build_runner: ^2.4.0
💡 注意:由于 Injectable 依赖代码生成,每次新增注入类后记得运行 dart run build_runner build --delete-conflicting-outputs。
三、核心功能:3 个场景化进阶用法
3.1 定义简单的全局单例 (@singleton)
标注一个类为全局唯一实例,适合网络请求、日志中心等。
import 'package:injectable/injectable.dart';
@singleton
class OhosNetworkManager {
// 💡 技巧:该类会被自动检测并注册进 GetIt 容器
void connect() => print("🚀 鸿蒙专属网络通道已建立");
}

3.2 构造函数参数的智能推断
当你的 Service 依赖另一个被管理的类时,Injectable 会自动完成'组装',无需手动查找实例。
@injectable
class UserProfileRepository {
final OhosNetworkManager _client;
// 💡 技巧:构造函数参数会自动被 Injectable 寻找并注入
UserProfileRepository(this._client);
}





