У меня есть проект android с Dagger 2. Dagger внедряет 2 действия, но когда я пытаюсь запустить приложение на моем устройстве, появляется эта ошибка:
java.lang.RuntimeException: Unable to start activity ComponentInfo{ru.swiftgroup.mirm/ru.swiftgroup.mirm.trackman.view.activities.CActivityLauncher}: java.lang.IllegalArgumentException: No injector factory bound for Class<ru.swiftgroup.mirm.trackman.view.activities.CActivityLauncher>
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2895)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1616)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:6651)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824)
Caused by: java.lang.IllegalArgumentException: No injector factory bound for Class<ru.swiftgroup.mirm.trackman.view.activities.CActivityLauncher>
at dagger.android.DispatchingAndroidInjector.inject(DispatchingAndroidInjector.java:104)
at dagger.android.AndroidInjection.inject(AndroidInjection.java:59)
at dagger.android.support.DaggerAppCompatActivity.onCreate(DaggerAppCompatActivity.java:43)
at ru.swiftgroup.mirm.trackman.view.activities.CActivityLauncher.onCreate(CActivityLauncher.kt:47)
at android.app.Activity.performCreate(Activity.java:7088)
at android.app.Activity.performCreate(Activity.java:7079)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1215)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2895)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1616)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:6651)
И я могу не понимаю причину. Код ниже:
CModuleActivityLauncher
@Module
class CModuleActivityLauncher
{
@CActivityScope
@Provides
fun provideContext(
activityLauncher : CActivityLauncher
) : Context
{
return activityLauncher
}
}
CModuleActivityMain
@Module
class CModuleActivityMain
{
@Provides
fun provideActivityMain(
activityMain : CActivityMain
) : CActivityMain
{
return activityMain
}
}
CModuleActivityBinding
@Module
abstract class CModuleActivityBinding
{
@CActivityScope
@ContributesAndroidInjector(
modules = [
CModuleActivityLauncher::class
]
)
internal abstract fun bindActivityLauncher(
) : CActivityLauncher
@CActivityScope
@ContributesAndroidInjector(
modules = [
CModuleActivityMain::class
]
)
internal abstract fun bindActivityMain(
) : CActivityMain
}
IComponentApp
@Singleton
@Component(
modules = [
AndroidSupportInjectionModule::class,
CModuleContext::class,
CModuleLogger::class,
CModuleNetworkTools::class
]
)
interface IComponentApp : AndroidInjector<CApplication>
{
@Component.Builder
abstract class Builder : AndroidInjector.Builder<CApplication>()
{
abstract override fun build() : IComponentApp
}
fun context() : Context
fun logger() : IServiceLogger
fun createComponent(
moduleRoom : CModuleRoom,
moduleProperties : CModuleProperties,
moduleDataService : CModuleDataService,
moduleTelemetry : CModuleTelemetry,
moduleServerAPI : CModuleServerAPI,
moduleIntelligentAssistant : CModuleIntelligentAssistant
) : IComponentExternalStorage
}
IComponentExternalStorage
@CScopeExternalStoragePrivilegeGranted
@Subcomponent(
modules = [
CModuleRoom::class,
CModuleProperties::class,
CModuleDataService::class,
CModuleTelemetry::class,
CModuleServerAPI::class,
CModuleIntelligentAssistant::class,
CModuleActivityBinding::class,
CModuleViewModel::class
]
)
interface IComponentExternalStorage
{
fun database() : CRoomDatabase
fun properties() : IServiceProperties
fun paths() : IServicePaths
fun telemetry() : IServiceTelemetryMessage
fun attributeValueService() : IServiceAttributeValue
fun intelligentAssistant() : IIntelligentAssistant
fun componentBuilderUser() : IComponentUser.Builder
}
Области применения
@MustBeDocumented
@Scope
@Retention(AnnotationRetention.RUNTIME)
annotation class CActivityScope
@MustBeDocumented
@Scope
@Retention(AnnotationRetention.RUNTIME)
annotation class CScopeExternalStoragePrivilegeGranted
CApplication (часть)
class CApplication : DaggerApplication()
{
companion object
{
private var mVersion : String
= ""
@JvmStatic
lateinit var componentApp : IComponentApp
private set
@JvmStatic
lateinit var componentExternalStorage
: IComponentExternalStorage
private set
}
private lateinit var logger : IServiceLogger
override fun onCreate()
{
super.onCreate()
AndroidThreeTen.init(this)
initDependencies()
CApplicationOld.init()
}
override fun attachBaseContext(context : Context)
{
super.attachBaseContext(context)
MultiDex.install(this)
}
override fun applicationInjector() : AndroidInjector<out CApplication>
{
initAppComponent()
return componentApp
}
private fun initAppComponent()
{
componentApp = DaggerIComponentApp.builder()
.create(this) as IComponentApp
}
private fun initDependencies()
{
logger = componentApp.logger()
}
}