每个片段的Dagger 2自定义范围(或活动等)

course

我看过几篇不同的文章,似乎在Dagger 2中提出了两种不同的自定义范围定义方法:

  1. 生存配置更改第2部分Github repo)的MVP演示者

    • 采用独特的定制范围的每个片段,例如@Hello1Scope@Hello2ScopeHello1FragmentHello2Fragment分别
  2. 在Android上品尝Dagger 2

    • 对所有片段使用单个自定义范围,例如@PerFragment

据我了解,似乎与方法2一样,可以定义一个可以用于所有片段(即@PerFragment的单一范围也可以实际上(如果我错了,请纠正我),自定义范围的名称似乎无关紧要,只有在创建子组件的地方(即在Application,Activity或Fragment中)才是重要的。

是否存在用例为每个片段定义唯一范围的情况(例如情况1)?

course

阅读@vaughandroid的答案后,什么决定了Dagger 2中组件(对象图)的生命周期?我认为我对自定义范围的理解足够好,可以回答我自己的问题。

首先,在处理dagger2中的组件,模块和作用域注释时,有一些规则。

  • 组件 必须具有(单个)范围注释(例如@Singleton@CustomScope)。
  • 模块 具有一个范围的注释。
  • 一个模块方法 可能有一个(单个)范围与其组件相匹配,或者没有范围,其中:
    • Scoped:意味着为组件的每个实例创建一个实例。
    • Unscoped:意味着每个in​​ject()或提供者调用都会创建一个新实例
    • 注意: Dagger2仅保留@Singleton用于根组件(及其模块)。子组件必须使用自定义范围,但是该范围的功能与完全相同@Singleton

现在,回答这个问题:我想为每个概念上不同的范围创建一个新的命名范围。例如,创建一个@PerActivity@PerFragment@PerView注释,该注释指示应在何处实例化该组件,从而指示其寿命。

注意:这是两个极端之间的折衷。考虑您需要一个根组件和n个子组件的情况

  • 至少2个注释(@Singleton@SubSingleton),以及
  • 最多 N + 1的注释(@Singleton@SubSingleton1,...@SubSingletonN)。

例子:

应用:

/** AppComponent.java **/ 
@Singleton
@Component( modules = AppModule.class )
public interface AppComponent{
    void inject(MainActivity mainActivity);
}

/** AppModule.java **/
@Module
public class AppModule{
    private App app;

    public AppModule(App app){
        this.app = app;
    }

    // For singleton objects, annotate with same scope as component, i.e. @Singleton
    @Provides @Singleton public App provideApp() { return app; }
    @Provides @Singleton public EventBus provideBus() { return EventBus.getDefault(); }
}

分段:

/** Fragment1Component.java **/
@PerFragment
@Component( modules = {Fragment1Module.class}, dependencies = {AppComponent.class} )
public interface Fragment1Component {
    void inject(Fragment1 fragment1);
}

/** Fragment1Module.java **/ 
@Module
public class Fragment1Module {
    // For singleton objects, annotate with same scope as component, i.e. @PerFragment
    @Provides @PerFragment public Fragment1Presenter providePresenter(){
        return new Fragment1Presenter();
    }
}

/** PerFragment.java **/ 
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface PerFragment {}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Dagger2自定义范围:自定义范围(@ActivityScope)实际如何工作?

来自分类Dev

无法显示自定义片段(kotlin、androidx、dagger 2)

来自分类Dev

从活动中调用自定义片段

来自分类Dev

每个片段的自定义选项菜单

来自分类Dev

带有活动和片段的自定义导航抽屉

来自分类Dev

带有活动和片段的自定义导航抽屉

来自分类Dev

为每个活动创建自定义操作栏

来自分类Dev

Dagger2范围,每个组件实例

来自分类Dev

为每个活动组织片段

来自分类Dev

使用导航组件将自定义类型对象从片段传递到活动

来自分类Dev

自定义arrayadapter组合了在同一活动的不同片段中使用的列表

来自分类Dev

如何将自定义对象arraylist从活动传递到带有实例的片段

来自分类Dev

如何将自定义数组列表从片段传递到活动

来自分类Dev

如何将内置或自定义主题应用于活动中的片段?

来自分类Dev

获取自定义帖子类型 [Wordpress] [活动管理器] 中的每个类别

来自分类Dev

在 Angular 2 中为每个用户自定义 URL

来自分类Dev

使用VBA为范围中的每个单元格提供Excel自定义超链接

来自分类Dev

如何更改每个自定义范围步骤上图标的颜色

来自分类Dev

自定义对话框片段

来自分类Dev

VSCode高级自定义片段

来自分类Dev

包含自定义ListView的片段

来自分类Dev

创建自定义适配器时,您只能将其用于活动还是可以使用片段?

来自分类Dev

片段和交换模块中的Dagger 2注入

来自分类Dev

如何使用Dagger 2在ViewPager中注入相同片段的ViewModel

来自分类Dev

ADFV2 自定义活动

来自分类Dev

在片段中每个列表视图有多个文本视图的情况下,如何设置自定义适配器

来自分类Dev

Dagger2在片段演示器中获取活动演示器的实例

来自分类Dev

自定义范围热图2

来自分类Dev

每个视图的自定义导航栏

Related 相关文章

  1. 1

    Dagger2自定义范围:自定义范围(@ActivityScope)实际如何工作?

  2. 2

    无法显示自定义片段(kotlin、androidx、dagger 2)

  3. 3

    从活动中调用自定义片段

  4. 4

    每个片段的自定义选项菜单

  5. 5

    带有活动和片段的自定义导航抽屉

  6. 6

    带有活动和片段的自定义导航抽屉

  7. 7

    为每个活动创建自定义操作栏

  8. 8

    Dagger2范围,每个组件实例

  9. 9

    为每个活动组织片段

  10. 10

    使用导航组件将自定义类型对象从片段传递到活动

  11. 11

    自定义arrayadapter组合了在同一活动的不同片段中使用的列表

  12. 12

    如何将自定义对象arraylist从活动传递到带有实例的片段

  13. 13

    如何将自定义数组列表从片段传递到活动

  14. 14

    如何将内置或自定义主题应用于活动中的片段?

  15. 15

    获取自定义帖子类型 [Wordpress] [活动管理器] 中的每个类别

  16. 16

    在 Angular 2 中为每个用户自定义 URL

  17. 17

    使用VBA为范围中的每个单元格提供Excel自定义超链接

  18. 18

    如何更改每个自定义范围步骤上图标的颜色

  19. 19

    自定义对话框片段

  20. 20

    VSCode高级自定义片段

  21. 21

    包含自定义ListView的片段

  22. 22

    创建自定义适配器时,您只能将其用于活动还是可以使用片段?

  23. 23

    片段和交换模块中的Dagger 2注入

  24. 24

    如何使用Dagger 2在ViewPager中注入相同片段的ViewModel

  25. 25

    ADFV2 自定义活动

  26. 26

    在片段中每个列表视图有多个文本视图的情况下,如何设置自定义适配器

  27. 27

    Dagger2在片段演示器中获取活动演示器的实例

  28. 28

    自定义范围热图2

  29. 29

    每个视图的自定义导航栏

热门标签

归档