簡體   English   中英

Dagger2-跨模塊依賴性

[英]Dagger2 - Cross-Module Dependecy

我正在嘗試使用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,但是當我嘗試執行Dependency時,一切都會失敗。

組件-主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-Main DI(MyApp依賴關系)

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

@Component批注已在MyAppComponent定義,所有短壽命組件都使用@SubComponent因為它們構建在更高級別的組件之上。 發生這種情況是因為MainComponent文件中還有@Component注釋的另一個聲明,請嘗試MainComponent文件使用@Subcomponent注釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM