我一直在尝试注入我的活动,由于某种原因,它似乎不起作用。如果我从DaggerAppCompatActivity扩展我的活动或直接在我的活动中实现HasAndroidInjector,这似乎不起作用。
错误
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mydemoapplication/com.example.accountcreationmodule.TestActivity}: java.lang.IllegalArgumentException: No injector factory bound for Class<com.example.accountcreationmodule.TestActivity>
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: java.lang.IllegalArgumentException: No injector factory bound for Class<com.example.accountcreationmodule.TestActivity>
at dagger.android.DispatchingAndroidInjector.inject(DispatchingAndroidInjector.java:136)
at dagger.android.AndroidInjection.inject(AndroidInjection.java:181)
at dagger.android.AndroidInjection.inject(AndroidInjection.java:55)
at dagger.android.support.DaggerAppCompatActivity.onCreate(DaggerAppCompatActivity.java:41)
at com.example.accountcreationmodule.TestActivity.onCreate(TestActivity.kt:9)
at android.app.Activity.performCreate(Activity.java:7802)
at android.app.Activity.performCreate(Activity.java:7791)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
组件
@Singleton
@Component(
modules = [
AccountCreationActivityBuilderModule::class,
AndroidInjectionModule::class],
dependencies = [AccountCreationFeature.Dependencies::class]
)
interface AccountCreationComponent : AndroidInjector<AccountCreationFeatureImpl> {
@Component.Factory
interface Factory {
fun create(
@BindsInstance testFeatureImpl: AccountCreationFeatureImpl,
accountCreationFeature: AccountCreationFeature.Dependencies
): AccountCreationComponent
}
}
AccountCreationFeatureImpl
class AccountCreationFeatureImpl : AccountCreationFeature {
private lateinit var accountCreationComponent: AccountCreationComponent
override fun inject(dependencies: AccountCreationFeature.Dependencies) {
if (::accountCreationComponent.isInitialized) {
return
} else{
accountCreationComponent = DaggerAccountCreationComponent.factory().create(this, dependencies)
}
}
}
ActivityBuilderModule
@Suppress("unused")
@Module
abstract class AccountCreationActivityBuilderModule {
@ContributesAndroidInjector(modules = [AccountCreationFragmentBuilderModule::class])
abstract fun contributeTestActivity(): TestActivity
}
FragmentBuilderModule
@Suppress("unused")
@Module
abstract class AccountCreationFragmentBuilderModule {
@ContributesAndroidInjector
abstract fun contributesTestFragment(): TestFragment
}
活动
class TestActivity : DaggerAppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_test)
}
}
片段
class TestFragment : DaggerFragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_blank, container, false)
}
}