模块依赖
业务模块要避免相互依赖,解耦,松耦合。 当某个业务模块不可避免要用到其他业务模块的功能时,可采取GetIt,实现依赖注入,这样当前业务模块并不直接依赖于另一业务模块,而是依赖于接口。
示例代码
比如说现在其他模块要使用IM模块某工具类的的loginNim()、createSession方法。
1.定义接口
import '../../biz_common.dart';
GetIt getIt = GetIt.instance;
abstract class IMSessionManagerService {
Future<String> createSession(String toUid);
}
abstract class ILoginNimService {
Future<dynamic> loginNim();
}
2.main.dart中注册对应的工具类单例
//注册一个单例供全局调
getIt.registerSingleton<IMSessionManagerService>(SessionManager.shared());
// 注册一个工厂方法来调用静态方法
getIt.registerSingleton<ILoginNimService>(LoginNimService());
3.实现接口
class SessionManager implements IMSessionManagerService {
Future<String> createSession(String toUid) async {
//这是本来就有的方法,我只是加上了implements IMSessionManagerService
}
4.getIt调用接口
getIt<IMSessionManagerService>().createSession(userId).then((sessionId) {
if (sessionId.isNotEmpty) {
Get.toNamed('/chatDetail', arguments: {'sessionId': sessionId});
}
});