java-从Dagger 2开始-类未注入
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-从Dagger 2开始-类未注入,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2403字,纯文字阅读大概需要4分钟。
内容图文
![java-从Dagger 2开始-类未注入](/upload/InfoBanner/zyjiaocheng/686/44f9bfc0b3e2479b9a6009214ab76766.jpg)
我试图将单例存储库注入Foo类以使用它.
回购没有注入并且仍然为空,为什么我缺少一些注释或那不是正确的方法
仓库.java
@Singlton
public class Repository {...}
Foo.java
public class Foo {
@Inject Repository repo;
}
解决方法:
Dagger通过组件工作:具体来说,您向Dagger传递了想要或想要做的事情的列表(组件接口),以及如何提供非平凡的依赖关系(模块),然后Dagger生成了您的实现界面可以满足您的需求.
您已经向我们展示了Foo及其依赖项存储库,但是如果您没有向我们展示该组件,那么我猜您可能没有.此时,您可以选择进行操作的方式:既可以从Dagger组件获取Foo,也可以像平常一样创建Foo,然后调用inject(foo)并使用其所有@Inject注入特定的Foo实例.字段(包括您的存储库).通常首选使用前者来创建一个简单的界面,但是后者可以在您不控制生命周期的对象(例如Android的Application,Activity,Fragment,Service和其他类似对象)中很好地工作.
越来越傻
如果选择让Dagger创建Foo,则需要为Foo和Repository创建一个@Inject批注的构造函数(甚至是一个空的),然后编写一个这样的Component:
@Component public interface YourComponent {
Foo createFoo(); // Name this whatever you like; it's a factory because
// of its return type and lack of parameters.
}
优秀的!现在,只要您具有YourComponent的实现,就可以创建Foo并将其注入.您尚未编写实现,但是如果编写了实现,则可能看起来像这样:
public YourComponentImpl implements YourComponent {
@Override public Foo createFoo() {
Foo foo = new Foo();
foo.repo = new Repository();
return foo;
}
}
但是,您不必编写一个:Dagger会在您compile the YourComponent interface with the Dagger compiler时为您编写与上面的代码等效的代码,这意味着使用指定为源代码处理器的Dagger编译器使用javac对其进行编译. Dagger用作注释处理器,它读取@Component接口并生成一个名为DaggerYourComponent的类.之后,您可以通过调用静态方法DaggerYourComponent.create()来获取实例,然后在该实例上调用Component.createFoo(),而无论在何处调用new Foo().
注入现有的Foo
要进行注入,您遵循与上述类似的模式,除了您的方法应采用一个参数(您现有的Foo实例),因此您无需在Foo上添加@Inject注释的构造函数,因为Dagger从来没有构造一个.不过,您需要使用Repository,因为Dagger会创建它.
@Component public interface YourComponent {
void inject(Foo foo); // Name this whatever you like; it's a members injector
// because it takes exactly one argument.
}
这将允许您像上面一样调用DaggerYourComponent.create()创建组件,然后调用yourComponent.inject(foo)将存储库注入到您注释的repo字段中.
一旦您对Dagger有了更熟悉的知识,就可以开始建立自己的知识并添加Modules,并使用Provider<>注入或添加作用域,以便您可以重用实例,而不必每次都创建新实例.检查更多的User’s Guide.
内容总结
以上是互联网集市为您收集整理的java-从Dagger 2开始-类未注入全部内容,希望文章能够帮你解决java-从Dagger 2开始-类未注入所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。