5

所以这个周末我花了很多时间在Mortar 和 Flow上,我想我终于把大部分时间都解决了。我发现它比我最初想象的要复杂一些,主要是因为我还没有完全了解 Dagger 的 ObjectGraph 范围,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);
    }
  }

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

@dagger.Module( //
      includes = ActionBarModule.class,
      injects = MainView.class,
      addsTo = ApplicationModule.class, //
      library = true //
  )
4

1 回答 1

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

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

  3. 如果您想了解更多关于这些的信息,Effective Java 对静态内部类、非静态内部类和匿名类有很好的解释。

于 2015-10-13T02:46:30.007 回答