Flutter依赖注入插件minimal_di的使用
Flutter依赖注入插件minimal_di的使用
Flutter 的 minimal_di
插件是一个轻量级的依赖注入工具包。它提供了简单的 API 来管理对象的注册、获取和生命周期。
仅有的6个简单特性
abstract class IDependencyInjection
{
bool isRegistered<T extends Object>({String? named}); // 检查是否已注册
void register<T extends Object>(T instance, {String? named}); // 注册实例
void registerLazy<T extends Object>(Future<T> Function() func, {String? named}); // 注册延迟加载实例
void change<T extends Object>(T instance, {String? named}); // 更改已注册的实例
T get<T extends Object>({String? named}); // 获取实例
Future<T> getAsync<T extends Object>({String? named}); // 异步获取实例
}
使用方法
示例代码
// 延迟加载一个整数
Future<int> initNumber(String number) async {
var parsed = int.tryParse(number);
parsed ??= 1; // 如果解析失败,则默认值为1
await Future.delayed(Duration(seconds: parsed)); // 模拟异步操作
return parsed;
}
void main() async {
// 初始化 minimal_di 实例
DI.instance.registerLazy<int>(() => initNumber("1"), named: "one");
// 异步获取注册的实例
var one = await DI.instance.getAsync<int>(named: "one");
// 断言结果是否为1
assert(one == 1);
}
说明
-
registerLazy
方法
使用registerLazy
方法可以注册一个延迟加载的实例。这里我们传递了一个返回Future<int>
的函数,并为其命名"one"
。 -
getAsync
方法
使用getAsync
方法可以异步获取之前注册的实例。这里我们通过名称"one"
获取之前注册的实例。 -
默认命名规则
如果未传递named
参数,则默认使用类型名(即runtimeType.toString()
)作为名称。
完整示例代码
import 'package:minimal_di/minimal_di.dart';
void main() async {
// 注册延迟加载的实例
DI.instance.registerLazy<int>(() => initNumber("1"), named: "one");
// 异步获取实例并断言
var one = await DI.instance.getAsync<int>(named: "one");
assert(one == 1);
print("One is: $one"); // 输出: One is: 1
}
// 延迟加载函数
Future<int> initNumber(String number) async {
var parsed = int.tryParse(number);
parsed ??= 1;
await Future.delayed(Duration(seconds: parsed));
return parsed;
}
运行上述代码后,您将看到控制台输出:
One is: 1
更多关于Flutter依赖注入插件minimal_di的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter依赖注入插件minimal_di的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
minimal_di
是一个轻量级的依赖注入(Dependency Injection, DI)插件,适用于 Flutter 项目。它提供了简单的方式来管理依赖关系,并且能够帮助你在应用程序中实现松耦合的代码设计。
安装 minimal_di
首先,你需要在 pubspec.yaml
文件中添加 minimal_di
依赖:
dependencies:
flutter:
sdk: flutter
minimal_di: ^0.1.0
然后运行 flutter pub get
来安装依赖。
使用 minimal_di
1. 创建一个依赖注入容器
import 'package:minimal_di/minimal_di.dart';
void main() {
final di = MinimalDI();
// 注册依赖
di.registerSingleton<MyService>(MyService());
// 运行应用程序
runApp(MyApp());
}
2. 注册依赖
你可以使用 registerSingleton
、registerFactory
或 registerLazySingleton
来注册依赖。
- Singleton: 单例模式,整个应用程序生命周期中只创建一个实例。
- Factory: 每次请求时都会创建一个新的实例。
- Lazy Singleton: 单例模式,但只在第一次请求时创建实例。
di.registerSingleton<MyService>(MyService());
di.registerFactory<MyService>(() => MyService());
di.registerLazySingleton<MyService>(() => MyService());
3. 获取依赖
你可以使用 get<T>()
方法来获取已注册的依赖。
final myService = di.get<MyService>();
4. 在 Widget 中使用依赖注入
你可以通过 MinimalDI
容器在 Widget 中获取依赖。
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
final myService = MinimalDI().get<MyService>();
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Minimal DI Example'),
),
body: Center(
child: Text(myService.getMessage()),
),
),
);
}
}
5. 完整的示例
import 'package:flutter/material.dart';
import 'package:minimal_di/minimal_di.dart';
class MyService {
String getMessage() {
return 'Hello from MyService!';
}
}
void main() {
final di = MinimalDI();
// 注册依赖
di.registerSingleton<MyService>(MyService());
// 运行应用程序
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
final myService = MinimalDI().get<MyService>();
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Minimal DI Example'),
),
body: Center(
child: Text(myService.getMessage()),
),
),
);
}
}