Кинжал 2 Android: фабрика форсунок не связана с деятельностью - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть проект 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()
    }
}
...