I am trying to make dagger-android work with Conductor (or any custom class). I tried replicating everything that AndroidSupportInjectionModule (and friends) do, which in my mind is the same kind of a custom class handling.
However I get
C:\Users\ursus\AndroidStudioProjects\...\ControllersModule.java:15: error: com.foo.bar.ChannelsController is not a framework type
public abstract com.foo.bar.ChannelsController channelsController();
So, my "library" code
package com.foo.bar
import com.bluelinelabs.conductor.Controller;
import dagger.Module;
import dagger.android.AndroidInjectionModule;
import dagger.android.AndroidInjector;
import dagger.internal.Beta;
import dagger.multibindings.Multibinds;
import java.util.Map;
@Beta
@Module(includes = AndroidInjectionModule.class)
public abstract class ConductorInjectionModule {
private ConductorInjectionModule() {
}
@Multibinds
abstract Map<Class<? extends Controller>, AndroidInjector.Factory<? extends Controller>> controllerInjectorFactories();
@Multibinds
abstract Map<String, AndroidInjector.Factory<? extends Controller>> controllerInjectorFactoriesWithStringKeys();
}
I dont even get compiled, so presuming pasting ConductorInjection & HasControllerInjector is pointless
Usage:
@Module
abstract class AppModule {
@ContributesAndroidInjector abstract fun mainActivity(): MainActivity
@ContributesAndroidInjector abstract fun channelsController(): ChannelsController
}
class App : Application(), HasActivityInjector, HasControllerInjector {
@Inject lateinit var activityInjector: DispatchingAndroidInjector<Activity>
@Inject lateinit var controllerInjector: DispatchingAndroidInjector<Controller>
private lateinit var appComponent: AppComponent
override fun onCreate() {
super.onCreate()
appComponent = DaggerAppComponent.builder()
.applicationContext(this)
.build()
.apply {
inject(this@App)
}
}
override fun activityInjector() = activityInjector
override fun controllerInjector() = controllerInjector
}
@Singleton
@Component(
modules = [
AndroidInjectionModule::class,
ConductorInjectionModule::class,
AppModule::class,
NetModule::class
]
)
interface AppComponent {
fun inject(app: App)
@Component.Builder
interface Builder {
@BindsInstance
fun applicationContext(context: Context): Builder
fun build(): AppComponent
}
}
implementation deps.dagger.runtime
implementation deps.dagger.androidRuntime
kapt deps.dagger.compiler
kapt deps.dagger.androidCompiler
where it is all "2.19" version (have tried 2.16)
AGP "com.android.tools.build:gradle:3.3.0-rc02" (have tried 3.2.1 stable)
Any clue? In my mind it all should work as its the same thing dagger-android-support does
