2 回答

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超3個(gè)贊
假設(shè)您需要@Binds或@Provides首先是錯(cuò)誤的。您可以而且應(yīng)該使用構(gòu)造函數(shù)注入——不是模式,而是Dagger 為我生成代碼。
您已經(jīng)有了用 注釋的構(gòu)造函數(shù)@Inject,因此 Dagger 知道該類以及如何創(chuàng)建它。沒有別的事可做。
public class SomeDependency {
@Inject
public SomeDependency() {
}
}
對(duì)于您的這個(gè)簡(jiǎn)單用例,您不需要任何@Provides,不@Binds,甚至不需要 a 。@Module您的示例應(yīng)該開箱即用,因?yàn)閮蓚€(gè)構(gòu)造函數(shù)都使用@Inject.
@Component
public interface ApplicationComponent {
Application build();
}
如果您需要指定范圍,可以將其添加到類中。
@Provides應(yīng)該用于不能使用構(gòu)造函數(shù)注入的代碼,或者需要額外設(shè)置的代碼。當(dāng)然,您可以手動(dòng)創(chuàng)建所有對(duì)象(就像您在示例中所做的那樣),但這并沒有真正的好處,只會(huì)產(chǎn)生很多可以避免的樣板。
@Binds將與您需要綁定到接口的實(shí)現(xiàn)一起使用。最佳情況下,您也可以使用構(gòu)造函數(shù)注入來(lái)實(shí)現(xiàn),但您也可以將其添加到組件構(gòu)建器 ( ) 或在帶注釋的方法@BindsInstance中創(chuàng)建它。@Provides
@Binds MyInterface bindMyImplementation(MyImplementation implementation);

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果您的類標(biāo)有@Inject構(gòu)造函數(shù):
public class SomeDependency {
@Inject // <----
public SomeDependency() {
}
}
然后,僅當(dāng)您需要將其“綁定”為接口的實(shí)現(xiàn)或至少與其具體類型不同的類型時(shí),才需要@Binds(或)。@Provides
另外,如果你的對(duì)象有一個(gè)@Inject構(gòu)造函數(shù),你不需要在模塊中實(shí)例化它,因?yàn)?Dagger 已經(jīng)知道如何實(shí)例化它。
因此,要修復(fù)您的代碼,您需要做的就是:
// @Module
// abstract class ApplicationModule {
// @Provides
// static SomeDependency provideDepdendencyOne() {
// return new SomeDependency();
// }
// }
解決了。
添加回答
舉報(bào)