Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Dagger2-交叉模块依赖性_Java_Android_Dagger 2_Android Mvp - Fatal编程技术网

Java Dagger2-交叉模块依赖性

Java Dagger2-交叉模块依赖性,java,android,dagger-2,android-mvp,Java,Android,Dagger 2,Android Mvp,我试图用Dagger2构建一个简单的跨模块依赖关系 当我重建项目时,所有Dagger组件都会崩溃 我有应用程序的通用应用程序依赖项注入包: 组件-通用DI @Singleton @Component( modules = { MyAppModule.class } ) public interface MyAppComponent { void inject( MyApp application ); } @Module public class MyAppModule {

我试图用Dagger2构建一个简单的跨模块依赖关系

当我重建项目时,所有Dagger组件都会崩溃

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

组件-通用DI

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

    void inject( MyApp application );
}
@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 );
    }
}
@MainScope
@Component( dependencies = { MyAppModule.class },  // <- Contains requested provider
            modules = { MainModule.class } )
public interface MainComponent {

    void inject( MainActivity view );
}
@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 );
    }
}
@Scope
@Retention( RetentionPolicy.RUNTIME )
@interface MainScope {
}
模块-通用DI

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

    void inject( MyApp application );
}
@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 );
    }
}
@MainScope
@Component( dependencies = { MyAppModule.class },  // <- Contains requested provider
            modules = { MainModule.class } )
public interface MainComponent {

    void inject( MainActivity view );
}
@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 );
    }
}
@Scope
@Retention( RetentionPolicy.RUNTIME )
@interface MainScope {
}
我有一个名为Main的层,它需要使用MyRepository,但是当我尝试执行依赖项时,所有这些都会下降

组件-主DI(MyApp依赖项)

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

    void inject( MainActivity view );
}
@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 );
    }
}
@Scope
@Retention( RetentionPolicy.RUNTIME )
@interface MainScope {
}

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

您好,Bruno,您已经在
MyAppComponent
中定义了
@组件
,所有短寿命组件都使用
@子组件
,因为它们构建在更高级别组件的顶部。我想这就是问题所在,
main组件中有另一个
@Component
注释,而不是
@Subcomponent
@Daniel Hi!我在我的项目中进行了更改,并且交叉依赖关系工作得很好!:)非常感谢!写一个答案,如果你愿意,我会把它作为解决方案。