Injectable 项目教程
injectableCode Generator for get_it项目地址:https://gitcode.com/gh_mirrors/inj/injectable
项目介绍
Injectable 是一个基于 Dart 语言的代码生成工具,旨在简化依赖注入的过程。它受到 Angular DI、Guice DI 和 inject.dart 的启发,通过自动生成代码来帮助开发者管理依赖关系。Injectable 与 GetIt 库配合使用,可以显著减少手动注册依赖的工作量,提高代码的可维护性和可读性。
项目快速启动
安装依赖
首先,在 pubspec.yaml
文件中添加以下依赖:
dependencies:
injectable: ^2.4.4
get_it: ^7.2.0
dev_dependencies:
injectable_generator: ^2.4.4
build_runner: ^2.1.7
配置 GetIt 实例
创建一个新的 Dart 文件(例如 injection.dart
),并定义一个全局变量用于 GetIt 实例:
import 'package:get_it/get_it.dart';
import 'package:injectable/injectable.dart';
final getIt = GetIt.instance;
@InjectableInit()
void configureDependencies() => $initGetIt(getIt);
生成代码
在项目根目录下运行以下命令以生成依赖注入代码:
dart run build_runner build
示例代码
假设我们有一个 ApiClient
类需要注入:
import 'package:injectable/injectable.dart';
@injectable
class ApiClient {
Future<void> fetchData() async {
// 实现数据获取逻辑
}
}
在应用启动时,调用 configureDependencies
函数进行依赖注入:
void main() {
configureDependencies();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(),
);
}
}
class HomeScreen extends StatelessWidget {
final ApiClient apiClient = getIt<ApiClient>();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Injectable 示例')),
body: Center(
child: ElevatedButton(
onPressed: () async {
await apiClient.fetchData();
},
child: Text('获取数据'),
),
),
);
}
}
应用案例和最佳实践
使用范围(Scopes)
Injectable 支持通过范围(Scopes)来管理依赖的生命周期。例如,可以在特定范围内注册依赖:
@Injectable(scope: 'auth')
class AuthController {}
在需要使用该范围的依赖时,调用生成的范围初始化方法:
await getIt.initAuthScope();
异步依赖注入
对于需要异步初始化的依赖,可以使用 @preResolve
注解:
@preResolve
Future<SharedPreferences> get prefs => SharedPreferences.getInstance();
自动注册
Injectable 支持基于命名约定的自动注册。例如,所有以 Repository
结尾的类会自动注册为单例:
@InjectableInit(autoRegisterByConvention: true)
void configureDependencies() => $initGetIt(getIt);
典型生态项目
Injectable 通常与以下项目配合使用,以构建完整的应用生态:
- GetIt: 依赖注入容器,用于管理依赖关系。
- Flutter: 用于构建跨平台应用的 UI 框架。
- Dio: 用于处理网络请求的库。
- SharedPreferences: 用于本地存储的库。
通过这些项目的组合,可以构建出高效、可维护的 Flutter 应用。
以上是 Injectable 项目的详细教程,涵盖了项目介绍、快速启动、应用案例和最佳实践以及典型生态项目。希望这些内容能帮助你更好地理解和使用 Injectable。
injectableCode Generator for get_it项目地址:https://gitcode.com/gh_mirrors/inj/injectable