匕首:需要帮助才能理解

时间:2015-02-02 13:02:29

标签: android dagger

我对匕首的工作方式有一些误解:

  1. 只有两种方法可以满足依赖关系:@Provide方法是返回实例,还是类应该有@Singleton注释,是吗?在后一种情况下,类构造函数必须具有@Inject注释吗?

  2. 正如我所见,ObjectGraph会生成所有注入内容。并且它说,应该调用它inject(T instance)来注入字段。但是,我可以使用@Inject对我的字段进行注释,然后就可以了(字段'类是@Singletone)。不需要ObjectGraph来满足这种依赖,对吗?

  3. injects{}中的@Module怎么样,它具体给出了什么? Plz,提供了保留所有可注射类列表的好处的一个例子。

1 个答案:

答案 0 :(得分:1)

  1. 是的,有两种方法:模块中的@Provide方法和构造函数中@Singleton的{​​{1}}类。
  2.   

    在后一种情况下,类构造函数必须具有@Inject注释吗?

    是的,否则Dagger不会创建对象。

    1. 我不认为@Inject进行现场注射可行。因为带有构造函数注入的类@Singleton意味着Dagger负责保留此类的一个实例。如果满足所有依赖关系,它可以使用构造函数注入创建此类。但是,带有字段注入的@Singleton似乎对我不用,因为保持此类的单个实例现在是用户的责任。 Dagger不能实例化这个对象。
      你确定这个配置编译并运行吗?如果它是检查@Singleton字段,那么根据我的理解它们应该是空的。

    2. @Inject中的
    3. injects={}会返回传递给@ModuleObjectGraph.inject(T class)的类集。参考documentation

        

      调用ObjectGraph.get(java.lang.Class)或ObjectGraph.inject(T)是一个错误,其类型不会在任何对象图的注入集中列出模块。进行此类调用将在运行时触发IllegalArgumentException。

    4. 这个集合帮助Dagger执行静态分析来检测错误和不满意的依赖关系。
      您可以在this thread中找到一些示例。