Java Dagger2-交叉模块依赖性
我试图用Dagger2构建一个简单的跨模块依赖关系 当我重建项目时,所有Dagger组件都会崩溃 我有应用程序的通用应用程序依赖项注入包: 组件-通用DIJava 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 {
@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!我在我的项目中进行了更改,并且交叉依赖关系工作得很好!:)非常感谢!写一个答案,如果你愿意,我会把它作为解决方案。