簡體   English   中英

向 App Activity 注入接口 - Hilt+Android

[英]Injecting Interface to an App Activity - Hilt+Android

DI 的新手。 假設在模塊 ABC 中有一個接口 XYZ,它被主應用程序項目用作依賴項。 我想將該接口 XYZ 注入到主項目中的 MainActivity 中。 請在下面查看我的嘗試方式。

ABC 模塊內容

XYZ

    interface XYZ {
       fun init()
    }

TestView class實現接口

class TestView: XYZ {  
    override fun init(){
    }
}

主要項目內容

應用模塊 class

@Module
@InstallIn(SingletonComponent::class)
object AppModule {

    @Provides
    fun xyz(): XYZ = TestView()
    
}

主要活動

@AndroidEntryPoint
class MainActivity : AppCompactActivity() {
   @Inject lateinit var xyz : XYZ

   override onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)

       xyz.init()
   }
}
  1. 如果這有什么問題,請告訴我。
  2. 如果我對另一個 class 使用相同的界面,讓我們說TestView2並在主項目的另一個活動中使用它。 我也可以在AppModule class中提供該視圖嗎? 如果是,我如何將它與第一個區分開來,因為兩者都將使用相同的界面?

提前致謝。

我不是高級開發人員,所以請對我的話持保留態度;)

如果這有什么問題,請告訴我。

是和否(見下文)

它會起作用,有些人更喜歡以這種方式提供界面,

但是最好使用@Binds(它生成的代碼更少,這使您的應用程序更小並且構建時間更快)

你可以在這里找到如何使用它

如果我對另一個 class 使用相同的界面,讓我們說 TestView2 並在主項目的另一個活動中使用它。 我也可以在 AppModule class 中提供該視圖嗎? 如果是,我如何將它與第一個區分開來,因為兩者都將使用相同的界面?

如果您創建 2 個返回相同類型的提供方法,匕首將不知道使用哪個方法來提供您的依賴項,這就是為什么您可以命名您的提供者(使用 @Named 注釋),您可以在此處找到更多相關信息

(另外,只是評論:不再真正推薦在一個應用程序中使用多個活動,我個人反對)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM