我对匕首的工作方式有一些误解:
只有两种方法可以满足依赖关系:@Provide
方法是返回实例,还是类应该有@Singleton
注释,是吗?在后一种情况下,类构造函数必须具有@Inject
注释吗?
正如我所见,ObjectGraph会生成所有注入内容。并且它说,应该调用它inject(T instance)
来注入字段。但是,我可以使用@Inject
对我的字段进行注释,然后就可以了(字段'类是@Singletone
)。不需要ObjectGraph来满足这种依赖,对吗?
injects{}
中的@Module
怎么样,它具体给出了什么? Plz,提供了保留所有可注射类列表的好处的一个例子。
答案 0 :(得分:1)
@Provide
方法和构造函数中@Singleton
的{{1}}类。 在后一种情况下,类构造函数必须具有@Inject注释吗?
是的,否则Dagger不会创建对象。
我不认为@Inject
进行现场注射可行。因为带有构造函数注入的类@Singleton
意味着Dagger负责保留此类的一个实例。如果满足所有依赖关系,它可以使用构造函数注入创建此类。但是,带有字段注入的@Singleton
似乎对我不用,因为保持此类的单个实例现在是用户的责任。 Dagger不能实例化这个对象。
你确定这个配置编译并运行吗?如果它是检查@Singleton
字段,那么根据我的理解它们应该是空的。
@Inject
中的 injects={}
会返回传递给@Module
或ObjectGraph.inject(T class)
的类集。参考documentation:
调用ObjectGraph.get(java.lang.Class)或ObjectGraph.inject(T)是一个错误,其类型不会在任何对象图的注入集中列出模块。进行此类调用将在运行时触发IllegalArgumentException。
这个集合帮助Dagger执行静态分析来检测错误和不满意的依赖关系。
您可以在this thread中找到一些示例。