Injectable 项目教程

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡寒侃Joe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值