java - Dagger 2 - 跨模块依赖

标签 java android dagger-2 android-mvp

我正在尝试使用 Dagger2 构建一个简单的跨模块依赖项。

当我重建项目时,所有 DaggerComponent 都会关闭。

我有应用程序的通用应用程序依赖注入(inject)包:

组件 - 通用 DI

@Singleton
@Component( modules = { MyAppModule.class } )
public interface MyAppComponent {

    void inject( MyApp application );
}

模块 - 通用 DI

@Module
public class MyAppModule {

    private MyApp mMyApp;

    public MyAppModule( MyApp application ) {
        mMyApp = application;
    }

    @Singleton
    @Provides
    public Application provideApplication() {
        return mMyApp;
    }

    @Singleton
    @Provides
    public SharedPreferences provideSharedPreferences( MyApp application ) {
        return PreferenceManager.getDefaultSharedPreferences( application );
    }

    @Singleton
    @Provides
    public MyDatabase provideMyDatabase() {
        return new MyDatabase();
    }

    @Singleton
    @Provides
    public MyRepositoryContract provideMyRepository( MyDatabase database, SharedPreferences sharedPreferences ) {
        return new MyRepository( database, sharedPreferences );
    }
}

我有一个名为 Main 的层,需要使用 MyRepository,但是当我尝试执行依赖项时,一切都会失败。

组件 - 主要 DI(MyApp 依赖项)

@MainScope
@Component( dependencies = { MyAppModule.class },  // <- Contains requested provider
            modules = { MainModule.class } )
public interface MainComponent {

    void inject( MainActivity view );
}

模块 - 主要 DI(MyApp 依赖项)

@Module( includes = { MyAppModule.class } )  // <- Contains requested provider
public class MainModule {

    private final MainContract.View mView;

    @MainScope
    public MainModule( MainContract.View view ) {
        mView = view;
    }

    @MainScope
    @Provides
    public MainContract.Model provideModel( MyRepositoryContract repository ) { 
        return new MainModel( repository ); // <- My requested object from MyApp DI package
    }

    @MainScope
    @Provides
    public MainContract.View provideView() {
        return mView;
    }

    @MainScope
    @Provides
    public MainContract.Presenter providePresenter( MainContract.Model model, MainContract.View
            view ) {
        return new MainPresenter( model, view );
    }
}

MainScope - 主要 DI(MyApp 依赖项)

@Scope
@Retention( RetentionPolicy.RUNTIME )
@interface MainScope {
}

最佳答案

@Component 注释已在 MyAppComponent 中定义,所有短期组件都使用 @SubComponent,因为它们构建在更高层之上级组件。发生这种情况是因为 MainComponent 文件中存在另一个 @Component 注释声明,请尝试对该文件使用 @Subcomponent 注释。

关于java - Dagger 2 - 跨模块依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51576844/

相关文章:

java - Dagger 中方法上的单例

android - Dagger 2 - 使用自定义范围时依赖不是单例

java - 尝试使用 Jersey 创建 REst 服务

android - 如何使用 Retrofit 的输入流加载 SSL 证书

java - jOOQ记录中的错误字段

javascript - Android 网络请求失败

android - 如何制作 "free"和 "paid"风格的应用程序,购买付费版本会删除免费版本

java - 错误: duplicate class while compiling java project with Gradle containing dagger generated sources

java - LibGdx 从表中删除 Actor ,然后重新排序

java - 用Java读取图像