相关疑难解决方法(0)

Dagger没有为/ test class生成组件

我在这里关注指南:https://github.com/ecgreb/dagger-2-testing-demo

我的app/src/main中有以下设置(省略了注入和@Provides代码):

public class FlingyApplication extends Application {
    @Singleton
    @Component(modules = { FlingyModule.class })
    public interface FlingyComponent
}

@Module
public class FlingyModule
Run Code Online (Sandbox Code Playgroud)

在app/src/test中:

public class TestFlingyApplication extends Application {
    @Singleton
    @Component(modules = { TestFlingyModule.class })
    public interface TestFlingyComponent extends FlingyComponent
}

@Module
public class TestFlingyModule
Run Code Online (Sandbox Code Playgroud)

到目前为止,它几乎与示例github相同.当dagger为src/main中的Component构建器生成代码时,它们会正确生成.但是,Dagger不会在src/test中为Component构建器生成代码.

我的主要build.gradle:

dependencies {
    classpath 'com.android.tools.build:gradle:2.1.0-alpha3'

    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.5.1'
}
Run Code Online (Sandbox Code Playgroud)

我的app/build.gradle

apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'


android {
    # There is obviously more in here, but this is the custom part:
    packagingOptions …
Run Code Online (Sandbox Code Playgroud)

android dagger-2

59
推荐指数
4
解决办法
1万
查看次数

Dagger 2:在不同库模块上的多个具有相同Scope的Component之间提供相同的实例

我有一个核心Android库,我使用@Singleton作用域来定义CoreComponent广告,以注入CoreModule提供的类的实例.

@Singleton
@Component(modules = {CoreModule.class})
public interface CoreComponent {
    void inject(SomeClass target);
}

@Module
public class CoreModule {
    @Singleton
    @Provides
    CoreRepository provideCoreRepository() {
        return new CoreRepositoryImpl();
    }
}
Run Code Online (Sandbox Code Playgroud)

我想从另一个依赖于核心库的Android库访问相同的@Singleton实例,并且正在使用另一个组件.

@Singleton
@FooScope
@Component(modules = {CoreModule.class, FooModule.class})
public interface FooComponent {
    void inject(SomeActivity target);
}

public class FooActivity extends AppCompatActivity {
    @Inject
    public CoreRepository repo;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        injectDependencies();
        super.onCreate(savedInstanceState);
    }
    [...]
}
Run Code Online (Sandbox Code Playgroud)

上面的代码构建,但@Singleton范围是Component的"本地".换句话说,有两个单例实例,一个用于CoreComponent,另一个用于FooComponent.

Android Application
??? Foo Library
|   ??? Core Library
??? Bar Library
|   ??? …
Run Code Online (Sandbox Code Playgroud)

java android dagger-2

18
推荐指数
1
解决办法
7654
查看次数

Dagger 2不会生成组件

非Android应用程序中我完全厌倦了Dagger 2 (IDE是IntelliJ IDEA).

的build.gradle

buildscript {
    repositories {
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath "net.ltgt.gradle:gradle-apt-plugin:0.9"
    }
}

apply plugin: 'java'
apply plugin: 'net.ltgt.apt'

dependencies {
    compile 'com.google.dagger:dagger:2.8'
    apt 'com.google.dagger:dagger-compiler:2.8'
    compileOnly 'javax.annotation:jsr250-api:1.0'
}
Run Code Online (Sandbox Code Playgroud)

零件

@Component(modules = {MyModule.class}) public interface MyComponent {}
Run Code Online (Sandbox Code Playgroud)

@Module class MyModule {}
Run Code Online (Sandbox Code Playgroud)

主要

DaggerMyComponent component = DaggerMyComponent.builder().build();
Run Code Online (Sandbox Code Playgroud)

编译说

找不到符号DaggerMyComponent

绝对没有更多的想法可能是错的:(

顺便说一句,如果我跑gradlew clean build --refresh-dependencies,没有错误,一切都很好!

但是因为我只在IDE中使用"重建项目" - 再次出错.可能是IDEA错误(回到Eclipse的时间)?

是的,我已经添加了生成的类作为内容根目录,因此IDE可以看到DaggerMyComponent.

java intellij-idea dagger-2

8
推荐指数
1
解决办法
2582
查看次数

Dagger 2没有生成我的组件类

我正在与Dagger 2一起创建我的依赖注入.它在几个小时前工作,但现在组件不再生成了.

这是我创建组件的地方:

public class App extends Application {

    CacheComponent mCacheComponent;
    ApiComponent mApiComponent;
    DataBaseComponent mDataBaseComponent;

    @Override
    public void onCreate() {
        super.onCreate();
        mCacheComponent = DaggerCacheComponent.builder()
                .cacheModule(new CacheModule(getApplicationContext()))
                .build();

        mApiComponent = DaggerApiComponent.builder()
                .apiModule(new ApiModule())
                .build();

        mDataBaseComponent = DaggerDataBaseComponent.builder()
                .dataBaseModule(new DataBaseModule(getApplicationContext()))
                .build();
    }

    public CacheComponent getCacheComponent(){ return mCacheComponent;}
    public ApiComponent getApiComponent() { return mApiComponent;  }
    public DataBaseComponent getDataBaseComponent() { return mDataBaseComponent;}
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,但现在我得到错误:

E:\AndroidProject\JoinTV\app\src\main\java\com\myproject\jointv\utils\App.java:7: error: cannot find symbol
import com.myproject.jointv.component.DaggerApiComponent;
                                       ^       
  symbol:   class DaggerApiComponent           
  location: package com.myproject.jointv.component
E:\AndroidProject\JoinTV\app\src\main\java\com\myproject\jointv\utils\App.java:8: error: cannot find symbol
import …
Run Code Online (Sandbox Code Playgroud)

android build.gradle android-gradle-plugin dagger-2

7
推荐指数
1
解决办法
4328
查看次数