簡體   English   中英

Android 匕首柄

[英]Android dagger hilt

我有一個 class NavigationController 需要一個活動實例,我的所有片段都通過這些活動托管。

class NavigationController constructor(private val activity: MainActivity) {
    
    fun navigateToAuth() {
        activity.supportFragmentManager
            .beginTransaction()
            .replace(R.id.main_container,WelcomeFrag())
            .commitAllowingStateLoss()
    }
}

這是我的 NavigationModule

@InstallIn(ApplicationComponent::class)

@Module
object NavigationModule {
    @Provides
    fun providesNavigationModule(activity: MainActivity): NavigationController {
        return NavigationController(activity)
    }
}

但是我收到錯誤,因為無法提供 MainActivity 需要 @Inject 或 @Provides 我知道 dagger 不知道如何創建 MainActivity 因為它沒有構造函數我無法注入它

那么我怎樣才能獲得活動並將其傳遞給我的 NavigationController?

  1. 如果您的NavigationModule依賴於Activity ,則您將其安裝在錯誤的component中。 您應該使用@InstallIn(ActivityComponent::class)
  2. Activity scope (=== ActivityComponent ) 中,Hilt 可以提供一個Activity實例作為依賴項。 它不能提供您的確切MainActivity的實例。 僅從您的代碼示例中很難判斷這是否可以滿足您的需求,但您可能會簡單地逃脫:
@InstallIn(ActivityComponent::class)
@Module
object NavigationModule {
    @Provides
    fun providesNavigationModule(activity: Activity): NavigationController {
        return NavigationController(activity)
    }
}

暫無
暫無

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

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