在kotlin中使用dagger2遇到的一個問題

寫在前面

最近在使用kotlin和Dagger2來開發(fā)項目。需要在dagger2 的module返回兩個相同的對象彭沼,因此使用到@Named注解。

如下圖所示

    @Provides
    @Named(Constants.Qualifier_HOME)
    fun provideHomePagerAdapter(): FragmentStatePagerAdapter {

        return object : AbstractPagerAdapter(fragment.childFragmentManager, arrayOf("android","ios")) {
            override fun getItem(pos: Int): Fragment? {
                //...省略
                return list[pos]
            }
        }
    }

    @Provides
    @Named(Constants.Qualifier_COLLECT)
    fun provideCollectPagerAdapter(): FragmentStatePagerAdapter {
        return object : AbstractPagerAdapter(fragment.childFragmentManager, arrayOf("code","article")) {
            override fun getItem(pos: Int): Fragment? {
                //...省略
                return list[pos]
            }
        }
    }

然后各自的頁面里

@FragmentScope
class HomeFragment : BaseFragment<ViewPagerFragmentBinding>() {

    @Inject
    @Named("home")
    lateinit var adapter: FragmentStatePagerAdapter
    //...省略
}

@FragmentScope
class MyCollectFragment : BaseFragment<ViewPagerFragmentBinding>() {

    @Inject
    @Named("collect")
    lateinit var adapter: FragmentStatePagerAdapter
    //...省略
}

照理說這樣是沒問題的(嗯备埃,java代碼是這樣)

但是卻遇到了編譯上的問題

image.png

然后看控制臺輸出的error

//...
xxadapter cannot be provided without an @Provides- or @Produces-annotated method.
//...  

猜想

哪里不對姓惑,猜想可能是@Named注解的問題,于是把@Named去掉按脚,只保留一個provideHomePagerAdapter方法于毙,發(fā)現(xiàn)可以運行,不報錯了乘寒。

解決

看來確實問題在這里,猜想難道是@Named注解在kotlin上有問題

  1. 嘗試去自定義了一個Qualifier用來替代@Named望众,嗯當然還是不行??
  2. 然后想想網(wǎng)上是不是有會遇到同樣問題的額,結(jié)果大多數(shù)都在講dagger2集成使用說明什么的,都是些常規(guī)的用法伞辛。??
  3. 搜了下Stack Overflow 沒有找到烂翰,然后在dagger2的issue里搜了下@Named,沒找到??(盲人)??
  4. 在kotlin交流群里問了蚤氏,零星的幾個人回答甘耿,沒效果就沒聲音了。還是要靠自己竿滨。??
  5. 于是在github上查看了許多使用Dagger2和kotlin開發(fā)的項目佳恬,結(jié)果都是比較常規(guī)的用法捏境,或者各自頁面有自己的component和module,寫成@Named注解的還沒看到毁葱。

難道kotlin有這么大的缺陷嗎垫言??不應該扒憬恕筷频!難道是我代碼有問題。

然后創(chuàng)建了一個java Demo 項目前痘,使用Dagger2進行了@Named嘗試 ------> pass?

6 . 于是就先放著吧凛捏,不用@Named ,先在fragment里用了by lazy 來實例化∏鄣蓿——>pass ?

現(xiàn)在項目開發(fā)的差不多了坯癣,回過頭再來處理它了。

7 . 首先當然還是百度最欠,google示罗,沒答案就準備去github 的dagger2項目看看,在issue里搜了一下kotlin

沒什么相關(guān)的問題窒所,倒是看到了一個問題


然后看到了這樣的寫法

嗯??好像有點不一樣鹉勒,難道要這么寫?
這個@field是什么吵取,看過@JvmName @jvmfield 沒見過這一個禽额,那就看下文檔:地址

??????,試了試———>pass ???

結(jié)語

在寫本文時皮官,我又搜了下dagger2的issue脯倒,這次搜的是kotlin,然后在closed的問題里看到了


然后大神回答了這個問題


??
本來想刪了不發(fā)捺氢,但是寫本文的初衷

一來是想分享一下這個問題的答案藻丢,避免有更多的人踩坑

二來想分享一下自己踩坑時解決的思路和方法(如果夠運的話,第三步就應該解決了)

三來是覺得多看看文檔是有好處的摄乒,想來如我這樣看了一下kotlin語法直接就寫項目的不在少數(shù)(雖說確實轉(zhuǎn)的快)悠反,但多看看文檔也許這個問題就不存在了

所以還是繼續(xù)寫了。見笑了馍佑,哈

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末斋否,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子拭荤,更是在濱河造成了極大的恐慌茵臭,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舅世,死亡現(xiàn)場離奇詭異旦委,居然都是意外死亡奇徒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門缨硝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來摩钙,“玉大人,你說我怎么就攤上這事追葡∠俾桑” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵宜肉,是天一觀的道長。 經(jīng)常有香客問我翎碑,道長谬返,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任日杈,我火速辦了婚禮遣铝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘莉擒。我一直安慰自己酿炸,他們只是感情好,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布涨冀。 她就那樣靜靜地躺著填硕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鹿鳖。 梳的紋絲不亂的頭發(fā)上扁眯,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機與錄音翅帜,去河邊找鬼姻檀。 笑死,一個胖子當著我的面吹牛涝滴,可吹牛的內(nèi)容都是我干的绣版。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼歼疮,長吁一口氣:“原來是場噩夢啊……” “哼杂抽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起腋妙,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤默怨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后骤素,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匙睹,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡愚屁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了痕檬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霎槐。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖梦谜,靈堂內(nèi)的尸體忽然破棺而出丘跌,到底是詐尸還是另有隱情,我是刑警寧澤唁桩,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布闭树,位于F島的核電站,受9級特大地震影響荒澡,放射性物質(zhì)發(fā)生泄漏报辱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一单山、第九天 我趴在偏房一處隱蔽的房頂上張望碍现。 院中可真熱鬧,春花似錦米奸、人聲如沸昼接。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽慢睡。三九已至,卻和暖如春膨疏,著一層夾襖步出監(jiān)牢的瞬間一睁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工佃却, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留者吁,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓饲帅,卻偏偏與公主長得像复凳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子灶泵,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,163評論 25 707
  • 部分內(nèi)容參考自:[Android]使用Dagger 2依賴注入 - DI介紹(翻譯)[Android]使用Dagg...
    AItsuki閱讀 47,511評論 66 356
  • 最近在項目中使用了 Dagger2 這個依賴注入的框架育八,在這里記錄一下。第一次寫技術(shù)文章赦邻,不足之處請多指教髓棋。不過真...
    lshilll閱讀 1,470評論 0 0
  • 前言 人生苦多,快來 Kotlin ,快速學習Kotlin按声! 什么是Kotlin膳犹? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,211評論 9 118
  • 什么事情是你想做而沒有做到的呢?如果將“我沒有做到签则。须床。〗チ眩”改成“我不要做到豺旬。。柒凉∽逶模”,再將剛才的句子重新寫出來膝捞。如果...
    棒棒糖Emma閱讀 809評論 0 4