interface FragmentInjectable @SuppressLint("Registered") open class DiActivity : AppCompatActivity(), HasSupportFragmentInjector { @Inject internal lateinit var fragmentInjector: DispatchingAndroidInjector override fun supportFragmentInjector() = fragmentInjector } fun Application.autoInject() { this.registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks { override fun onActivityCreated(activity: Activity?, p1: Bundle?) { activity?.also { if (it is HasSupportFragmentInjector) AndroidInjection.inject(it) if (it is FragmentActivity) { it.supportFragmentManager.registerFragmentLifecycleCallbacks( object : FragmentManager.FragmentLifecycleCallbacks() { override fun onFragmentCreated(fm: FragmentManager?, f: Fragment, savedInstanceState: Bundle?) { if (f is FragmentInjectable) AndroidSupportInjection.inject(f) } }, true) } } } override fun onActivityPaused(activity: Activity?) {} override fun onActivityResumed(activity: Activity?) {} override fun onActivityStarted(activity: Activity?) {} override fun onActivityDestroyed(activity: Activity?) {} override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) {} override fun onActivityStopped(activity: Activity?) {} }) }