Android Dagger出现No injector factory bound for Class报错应用崩溃求助
核心错误定位
本次崩溃的核心触发错误为:
Caused by: java.lang.IllegalArgumentException: No injector factory bound for Class<com.asit1.readyapp.resturants.S1_RestaurantsList>
其余日志均为安卓模拟器运行时的系统报错,和本次应用崩溃无关联。
触发原因
该错误是Dagger Android框架的典型配置错误,本质是框架找不到com.asit1.readyapp.resturants.S1_RestaurantsList对应的注入器工厂,常见触发场景如下:
- 未在Dagger的注入绑定模块中为
S1_RestaurantsListActivity声明绑定规则 - 包含Activity绑定规则的模块,未被添加到AppComponent的模块依赖树中
- 绑定时填写的Activity全限定类名和实际类名不一致,存在拼写错误
- 应用自定义Application未正确实现
HasAndroidInjector接口,注入器初始化失败
排查步骤
- 检查项目中用于绑定Android组件的Dagger模块(带
@Module注解的抽象类),确认是否存在S1_RestaurantsList的绑定声明,标准写法如下:
@Module public abstract class ActivityBindingModule { @ContributesAndroidInjector abstract S1_RestaurantsList bindS1RestaurantsListInjector(); // 其他Activity的绑定声明 }
- 检查AppComponent的注解配置,确认上述Activity绑定模块已被加入
modules列表,同时必须引入官方的AndroidInjectionModule:
@Singleton @Component(modules = { AndroidInjectionModule.class, ActivityBindingModule.class, // 其他业务模块 }) public interface AppComponent extends AndroidInjector<MyApplication> { }
- 检查自定义Application类的实现,确认已正确实现
HasAndroidInjector接口,且注入器初始化逻辑正确:
public class MyApplication extends Application implements HasAndroidInjector { @Inject DispatchingAndroidInjector<Object> androidInjector; @Override public void onCreate() { super.onCreate(); // 初始化AppComponent并注入 DaggerAppComponent.builder() .application(this) .build() .inject(this); } @Override public AndroidInjector<Object> androidInjector() { return androidInjector; } }
- 核对绑定声明中的类和实际
S1_RestaurantsList的全限定类名是否完全一致,注意包名拼写、大小写是否匹配。
修复方法
按照上述排查步骤逐一修正配置错误后,重新编译运行项目即可解决该崩溃问题。如果项目使用Kotlin进行开发,配置逻辑完全一致,仅语法有差异。
内容的提问来源于stack exchange,提问作者Engi.Ahmed
相关产品推荐
相关产品推荐

