FlutterIM项目_Part7_GetIt依赖注入,模块依赖解耦

68 阅读1分钟

模块依赖

业务模块要避免相互依赖,解耦,松耦合。 当某个业务模块不可避免要用到其他业务模块的功能时,可采取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});
  }
});