在尝试集成最新的Dagger 2版本时,我遇到了Dagger自动生成的问题。尽管有几个Rebuild和Make Module App流程,但Dagger并没有自动生成DaggerAppComponent。
申请类:
public class BaseApplication extends Application
{
private AppComponent appComponent;
@Override
public void onCreate()
{
super.onCreate();
initAppComponent();
}
private void initAppComponent()
{
DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();
}
public AppComponent getAppComponent()
{
return appComponent;
}
}
AppComponent
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent
{
void inject(BaseApplication application);
}
的AppModule:
@Module
public class AppModule
{
private BaseApplication application;
public AppModule(BaseApplication app)
{
application = app;
}
@Provides
@Singleton
Context provideContext()
{
return application;
}
@Provides
Application provideApplication()
{
return application;
}
}
使用的依赖关系:
compile 'com.google.dagger:dagger-android:2.11'
compile 'com.google.dagger:dagger-android-support:2.11'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.11'
androidTestCompile 'com.google.code.findbugs:jsr305:3.0.1'
在这方面的任何帮助将受到高度赞赏。
答案 0 :(得分:22)
好像我使用了错误的依赖项:
compile 'com.google.dagger:dagger-android:2.x'
compile 'com.google.dagger:dagger-android-support:2.x' // if you use the support libraries
annotationProcessor 'com.google.dagger:dagger-android-processor:2.x'
如果您在dagger.android中使用类,则应使用上述依赖项。
正确的依赖关系是:
compile 'com.google.dagger:dagger:2.x'
annotationProcessor 'com.google.dagger:dagger-compiler:2.x'
答案 1 :(得分:2)
添加以下依赖项为我解决了问题:
annotationProcessor 'com.google.dagger:dagger-compiler:2.12'
答案 2 :(得分:1)
您需要这两行
implementation 'com.google.dagger:dagger:2.16'
kapt 'com.google.dagger:dagger-compiler:2.16'
使用kotlin时,请使用kapt而不是notificationProcessor。 生成的类,例如Dagger + AppComponentClass, 例如:DaggerAppComponent
答案 3 :(得分:1)
尝试,转到“文件”,然后
无效并重新启动
答案 4 :(得分:0)
我遇到了同样的问题...解决了我的问题的方法实际上是将视图模型添加到ViewmodelModulle,然后将注释@Inject添加到我的视图模型的构造函数中。对于您来说,这可能是一个不同的问题,但是在我看来,这确实有所帮助。我的代码编译没有问题
@Inject <-----这在构造函数中丢失。
public MessageViewModel(Application application) {
super(application);
mApp = application;
答案 5 :(得分:0)
1。清理项目 2.重建 3.File->无效并重新启动
答案 6 :(得分:0)
需要运行一次您的APP才能生成“ DaggerAppComponent”
答案 7 :(得分:-1)
Chenge code to this,
private void initAppComponent()
{
/* DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();*/
appComponent = DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();
appComponent .inject(this)
}
其他事情
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent
{
void inject(BaseApplication application);
}
为什么需要在构建组件的地方注入相同的类,您可以轻松地在Application类上获取上下文和应用程序。 Dagger可以帮助您找到一个依赖类。