android – 如何使用Dagger 2将多个组件注入同一个对象

前端之家收集整理的这篇文章主要介绍了android – 如何使用Dagger 2将多个组件注入同一个对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我有一个ApplicationComponent用于将单例注入到我的片段和演示者中,但我正在尝试创建一个组件以注入AppComponent所做的同一个演示者.沿着这些方向的东西.
  1. @Component{modules = FileManagerModule.class}
  2. public interface FileManagerComponet
  3. {
  4. public void inject(MyPresenter presenter);
  5. }
  6.  
  7. @Component{modules = AppModule.class}
  8. public interface AppComponent
  9. {
  10. public void inject(MyPresenter presenter);
  11. }
  12.  
  13. @Module
  14. public class AppModule
  15. {
  16. private Context appContext;
  17. @Provides
  18. @Singleton
  19. public SharedPreferences preferences()
  20. {
  21. return appContext.sharedPreferences();
  22. }
  23. ...
  24. }
  25.  
  26. @Module
  27. public class FileManagerModule
  28. {
  29. private Context activityContext;
  30. @Provides
  31. public FileManager FileManager()
  32. {
  33. return new FileManager(activityContext);
  34. }
  35. ...
  36. }
@H_301_5@解决方法
对于任何无法解决这个问题的人来说,一个组件必须为对象提供所有依赖关系.所以在我的情况下,我必须使FileManagerComponent成为一个子组件,并将“.plus()”与我的AppComponent一起使用,或者让它依赖于AppComponent,让AppComponent通过Context context()来暴露Context下游;允许依赖于它的组件可以访问其拥有的上下文的方法.

例如:

  1. @Singleton
  2. @Component(modules = {NetworkModule.class,AndroidModule.class})
  3. public interface ApplicationComponent {
  4. FileManagerComponent plus(FileManagerModule module);
  5. }
  6.  
  7. @Subcomponent(modules = {FileManagerModule.class})
  8. public interface FileManagerComponent {
  9. void injectMyActivity(MyFileManagingActivity activity);
  10. }

你会像这样使用它(在MyFileManagingActivity中):

  1. FileManagerComponent fmc = applicationComponent.plus(new FileManagerModule());
  2. fmc.injectMyActivity(this);

或者,如果您不想使用这样的子组件:

  1. @Singleton
  2. @Component(modules = {NetworkModule.class,AndroidModule.class})
  3. public interface ApplicationComponent {
  4. Context context();
  5. File applicationRootDirectory();
  6. }
  7.  
  8. // Notice this is ALSO a Component
  9. @Component(modules = {FileManagerModule.class},dependencies = ApplicationComponent.class)
  10. public interface FileManagerComponent {
  11. void inject(MyFileManagerActivity activity);
  12. }

现在,您必须构建依赖于app组件的组件.

  1. FileManagerComponent fmc = DaggerFileManagerComponent.builder()
  2. .applicationComponent(appComponent)
  3. .fileManagerModule(new FileManagerModule())
  4. .build();
  5. fmc.inject(this);

猜你在找的Android相关文章