匕首和对象图表与流/砂浆的范围

spi*_*ce7 5 object-graph dagger

所以我本周末花了很多时间在Mortar和Flow上,我想我终于完成了大部分工作.我发现它比我原先想象的要复杂一点,主要是因为我还没有完全理解Dagger的ObjectGraph Scoping,Mortar非常依赖它.我在Dagger的网站上已经阅读了尽可能多的内容,但是我发现这个主题的信息在与Dagger特别相关时缺乏.

所以我有几个问题:1.我看到他们对@ Singleton的范围的例子:

@Layout(R.layout.screen_friend)
public class FriendScreen implements Blueprint {

  @Override public String getMortarScopeName() {
    return getClass().getName();
  }

  @Override public Object getDaggerModule() {
    return new Module();
  }

  @dagger.Module(
      injects = FriendView.class
  )
  static class Module {
  }

  @Singleton
  public static class Presenter extends ViewPresenter<TestView> {

    @Inject
    public Presenter() {
      Log.d("FriendScreen", "Friend Presenter Created");
    }

    @Override protected void onLoad(Bundle savedInstanceState) {
      super.onLoad(savedInstanceState);
    }
  }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Presenter是否专门针对此模块,因为它是一个内部类?2.如何确保仅在此对象图中创建它的实例而不是全局应用程序对象图?2.如果演示者太大了,我想把它移到它自己的独立课程怎么办?我如何将其范围仅限于此模块?3.我注意到他们示例中的某些Module类是静态的,而其他类则不是.这对范围界定有什么影响吗?4.我在哪里可以阅读更多内容以更好地理解Dagger的对象图.我需要更好地理解includes,inject,addsTo以及如何在ObjectGraph创建中使用它们等:

@dagger.Module( //
      includes = ActionBarModule.class,
      injects = MainView.class,
      addsTo = ApplicationModule.class, //
      library = true //
  )
Run Code Online (Sandbox Code Playgroud)

Fri*_*ail 0

  1. 我不认为演示者的范围仅限于模块,因为在轮换中它们会被保留。@Singleton 注释还让我相信演示者位于全局图上,并且在活动重新创建自身时仅绑定到视图。

  2. 这是一个很好的范围界定来源

  3. 如果您想了解更多关于静态内部类、非静态内部类和匿名类的信息,Effective Java 有一个关于静态内部类、非静态内部类和匿名类的精彩解释。