匕首生成器能否动态/递归生成树结构?

时间:2019-07-17 23:11:26

标签: dagger-2

例如,我的树是:

class TreeNode {
  List<TreeNode> children;
}

我正在寻找/希望在制作人中有一些东西,例如:

@ProducerModule
class RecursiveModule {
  @Produces
  ListenableFuture<TreeNode> produceNode(/*...?*/) {
    // Somehow recursively get a node.
  }
}

以便它可以动态地解析某些外部源,并为我递归构造一个节点。

一个更具体的小示例用例可能是构建HN新闻阅读器。在他们的API中,有一个Item可能有多个子Item。因此,要阅读包含所有评论的新闻,需要获取根Item并递归获取其子项。

*我是匕首制作人的新手,我正在尝试学习它可以做什么。我不确定这种递归是否会打破匕首的名字中的“非循环”,但我很好奇这是否可行。

1 个答案:

答案 0 :(得分:0)

我(有点)有一个解决方法:

让组件将生产执行程序作为参数传入。

@ProductionComponent(/* ... */)
class TreeComponent {
  // ...
  @ProductionComponent.Builder
  interface Builder {
    @BindsInstance
    Builder executor(@Production Executor executor);
    @BindsInstance
    Builder id(@NodeId int id); // Say we need an id to know which node to process, or how to process a node.
    // ...
  }
}

然后为每个节点处理节点本身,并为每个孩子创建一个生产者。

通过这种方式,我可以自己管理生产者树。但是生产者库仍然负责异步协调。我认为仍然有好处。