Flutter Injectable:泛型类型多实例注入的注解实现方案
解决方案
你可以通过Injectable 自定义Module的方式实现多泛型实例的注册,步骤如下:
步骤1:移除泛型类上的默认@injectable注解
// 去掉原有的@injectable注解 class TestBloc<T> { // 原有逻辑保持不变 }
步骤2:定义自定义注册Module
创建一个抽象类作为注册Module,添加@module注解,在内部分别声明三个不同泛型的实例提供方法:
@module abstract class TestBlocRegisterModule { // 注册TestBloc<One>实例 Factory<TestBloc<One>> provideTestBlocOne() => TestBloc<One>(/*原有传参*/); // 注册TestBloc<Two>实例 Factory<TestBloc<Two>> provideTestBlocTwo() => TestBloc<Two>(/*原有传参*/); // 注册TestBloc<Three>实例 Factory<TestBloc<Three>> provideTestBlocThree() => TestBloc<Three>(/*原有传参*/); }
如果需要在注入时区分同泛型的不同实例,可以给对应提供方法添加@Named注解:
@Named("specialOneBloc") Factory<TestBloc<One>> provideSpecialTestBlocOne() => TestBloc<One>(/*特殊传参*/); // 注入时指定注解即可拿到对应实例 @injectable class DemoPage { final TestBloc<One> bloc; DemoPage(@Named("specialOneBloc") this.bloc); }
步骤3:重新运行生成命令
执行构建命令重新生成依赖配置文件:
flutter pub run build_runner build --delete-conflicting-outputs
生成后的代码会自动包含你需要的三个不同泛型参数的TestBloc注册逻辑,和之前手写的注册逻辑完全一致。
内容的提问来源于stack exchange,提问作者A.K.
相关产品推荐
相关产品推荐

