在您的特定情况下,您会丢失:
@Binds Application bindApplication(App app);
这很重要,因为dagger.android将自动包含
对特定Application,Activity,Fragment,Service,BroadcastReceiver等子类 的绑定 , 但不包含对
一般对象 的绑定。(您可以注入 App 而不注入 Application ,并注入 YourActivity 而不注入 Activity
。)如果要指示dagger.android使用应用程序实例应满足对Application的请求,则必须包含上述绑定。
一般而言,对于Application,Activity,Service和BroadcastReceiver而言,这是一件相当安全的事情,但对于Fragment(本机或在compat库中)而言则不是。这是因为dagger.android尊重嵌套片段,在这种情况下,要插入哪个片段将是模棱两可的。
尽管您可以通过luffy的答案中的Module和instance字段提供Application
,但这比您需要的样板好,而且优化程度也较低:Dagger将编写代码来调用您的
@Provides方法,而您可以声明性地告诉Dagger重用现有的代码使用
@Binds或编写
static@Provides避免在实例上调用调用的方法进行绑定。
参见Dagger的优势
@Binds和Android静态调度的优势。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)