Dagger2 - 跨模块依赖

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


当我重新构建项目时,所有 DaggerComponents 都会关闭。


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


组件 - 一般 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;

    }



30秒到达战场
浏览 412回答 1
1回答

四季花海

在@Component注释中已定义MyAppComponent,所有短命的组件使用@SubComponent,因为它们建立在更高级别的组件的顶部。发生这种情况是因为文件中有另一个@Component注释声明MainComponent,请尝试对该文件使用@Subcomponent注释。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java