Flutter依赖注入插件dart_injektor的使用
Flutter依赖注入插件dart_injektor的使用
这是Dart语言中一个轻量级的依赖注入包,提供了注册和解析依赖的功能。
使用
import 'package:dart_injektor/injektor.dart';
// 获取依赖注入实例,或创建一个新的实例。
final injektor = Injektor();
// 注册一个依赖实例。
final myDependency = MyDependency();
injektor.register<MyDependency>(myDependency);
// 解析依赖。
// 或者,你可以使用`resolve`或`call`方法来更明确地进行操作。
final myClass = injektor<MyDependency>();
API
Injektor
包提供了以下方法:
-
register<T>(T instance, [String identifier = 'DEFAULT'])
注册一个依赖实例。
T
类型参数指定依赖的类型。instance
参数是要注册的实例。identifier
参数是一个可选标识符。如果未提供,则默认为DEFAULT
。 -
lazyRegister<T>(Function() factory, [String identifier = 'DEFAULT'])
注册一个依赖工厂函数。
T
类型参数指定依赖的类型。factory
参数是一个返回依赖实例的函数。identifier
参数是一个可选标识符。如果未提供,则默认为DEFAULT
。 -
resolve<T>([String identifier = 'DEFAULT'])
-
call<T>([String identifier = 'DEFAULT'])
-
<T>([String identifier = 'DEFAULT'])
解析一个依赖实例。
T
类型参数指定依赖的类型。identifier
参数是一个可选标识符,用于解析实例或工厂。如果没有提供,则默认为DEFAULT
。如果给定类型和标识符的实例已注册,则返回该实例。否则,如果给定类型和标识符的工厂已注册,则调用工厂以创建实例并将其注册后再返回。如果没有注册实例或工厂,则会抛出异常。 -
dispose<T>([String identifier = 'DEFAULT'])
处理一个依赖实例或工厂。
T
类型参数指定依赖的类型。identifier
参数是一个可选标识符,用于处理实例或工厂。如果没有提供,则默认为DEFAULT
。如果给定类型和标识符的实例已注册,则从实例映射中移除。如果给定类型和标识符的工厂已注册,则从工厂映射中移除。 -
disposeAll()
处理所有依赖实例和工厂。从实例映射中移除所有实例,并从工厂映射中移除所有工厂。
特性
- ✅ 注册实例(急切),实例在注册时创建。
- ✅ 注册工厂(懒惰),实例在第一次解析时创建。
- ✅ 解析实例,如果存在则返回实例。
- ✅ 处理实例或工厂,从注入器中移除实例或工厂。
- ✅ 处理所有,从注入器中移除所有实例和工厂。
许可证
此库根据 MIT License
许可。
完整示例Demo
import 'dart:developer' as developer;
import 'package:dart_injektor/injektor.dart';
void main() {
final Injektor injektor = Injektor();
// 注册一个依赖实例。
final SampleClass sampleClassInstance = SampleClass();
injektor.register<SampleClass>(sampleClassInstance);
// 注册一个懒加载工厂。
injektor.lazyRegister<SampleClass>(
() => SampleClass(type: 'factory'),
'SAMPLE_CLASS_FACTORY_KEY',
);
// 解析默认实例。
final SampleClass resolvedDefaultInstance = injektor<SampleClass>();
developer.log('resolvedDefaultInstance.type: ${resolvedDefaultInstance.type}');
// 解析带有标识符的实例。
final SampleClass resolvedFactoryInstance = injektor<SampleClass>('SAMPLE_CLASS_FACTORY_KEY');
developer.log('resolvedFactoryInstance.type: ${resolvedFactoryInstance.type}');
// 处理实例。
injektor.dispose<SampleClass>();
try {
// 尝试解析已处理的实例。
injektor<SampleClass>();
} on Exception catch (e) {
developer.log('$e');
}
}
class SampleClass {
SampleClass({this.type = 'default'});
final String type;
}
更多关于Flutter依赖注入插件dart_injektor的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter依赖注入插件dart_injektor的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用dart_injektor
进行依赖注入的示例代码。dart_injektor
是一个用于Flutter的依赖注入库,它允许你轻松地在应用的不同部分之间共享和管理依赖项。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加dart_injektor
依赖:
dependencies:
flutter:
sdk: flutter
dart_injektor: ^x.y.z # 请使用最新版本号替换x.y.z
然后运行flutter pub get
来安装依赖。
2. 创建依赖项
假设我们有一个简单的服务类UserService
,它有一个方法getUserName
来返回用户名。
// user_service.dart
class UserService {
String getUserName() {
return "John Doe";
}
}
3. 配置依赖注入容器
接下来,我们需要在应用的入口点(例如main.dart
)中配置dart_injektor
。
// main.dart
import 'package:flutter/material.dart';
import 'package:dart_injektor/dart_injektor.dart';
import 'user_service.dart';
void main() {
// 配置依赖注入容器
Injektor.container
..registerSingleton<UserService>(() => UserService());
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
4. 使用依赖注入
现在,我们可以在任何需要UserService
的地方通过Injektor
来获取它的实例。
// my_home_page.dart
import 'package:flutter/material.dart';
import 'package:dart_injektor/dart_injektor.dart';
import 'user_service.dart';
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
// 获取UserService实例
final userService = Injektor.get<UserService>();
return Scaffold(
appBar: AppBar(
title: Text('Flutter Demo Home Page'),
),
body: Center(
child: Text('User Name: ${userService.getUserName()}'),
),
);
}
}
完整示例
将上述代码片段整合到一个完整的Flutter项目中,如下所示:
pubspec.yaml
name: flutter_demo
description: A new Flutter project.
version: 1.0.0+1
environment:
sdk: ">=2.12.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
dart_injektor: ^x.y.z # 请使用最新版本号替换x.y.z
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
user_service.dart
class UserService {
String getUserName() {
return "John Doe";
}
}
main.dart
import 'package:flutter/material.dart';
import 'package:dart_injektor/dart_injektor.dart';
import 'user_service.dart';
import 'my_home_page.dart';
void main() {
Injektor.container
..registerSingleton<UserService>(() => UserService());
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
my_home_page.dart
import 'package:flutter/material.dart';
import 'package:dart_injektor/dart_injektor.dart';
import 'user_service.dart';
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final userService = Injektor.get<UserService>();
return Scaffold(
appBar: AppBar(
title: Text('Flutter Demo Home Page'),
),
body: Center(
child: Text('User Name: ${userService.getUserName()}'),
),
);
}
}
以上代码展示了如何在Flutter项目中使用dart_injektor
进行依赖注入。通过这种方式,你可以轻松地在整个应用中共享和管理依赖项。