Android从BaseActivity注入所有从BaseActivity扩展的类

时间:2019-04-15 06:25:55

标签: android dagger-2

在我的应用程序中,我正在使用Dagger,并且一些活动正在使用它,我想在BaseActivity上实现注入,而不是在我想使用{{1}的所有活动上实现注入}例如:

这是我的LoginActivity:

Dagger

在此活动中,我使用class LoginActivity : AppCompatActivity(){ @Inject internal lateinit var personsRemoteRepository: PersonsRemoteRepository @Inject internal var restClient: RestClient? = null private var component: ApplicationComponent? = null private var mBinding: LoginActivityBinding? = null private var viewModel: LoginMethodsViewModel? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) component = DaggerApplicationComponent.builder() .projectApplicationComponent(CoreApplication.getComponent()) .build() component?.inject(this) mBinding = DataBindingUtil.setContentView(this, R.layout.login_activity) personsRemoteRepository = PersonsRemoteRepository(restClient) viewModel = LoginMethodsViewModel(personsRemoteRepository, this, mBinding) mBinding!!.viewModel = viewModel } } 进行注入,现在我想拥有DaggerApplicationComponent这样的课程:

BaseActivity

,当我扩展此类而不是在open class BaseActivity : AppCompatActivity() { protected var component: ApplicationComponent? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) component = DaggerApplicationComponent.builder() .projectApplicationComponent(CoreApplication.getComponent()) .build() component?.inject(this) } } 上扩展AppCompatActivity时,我可以使用注入,例如:

LoginActivity

1 个答案:

答案 0 :(得分:1)

dagger-java不支持此功能。但是,如果将它与dagger-android一起使用,并且将活动范围与DaggerActivity一起使用,它将按您希望的那样工作。还必须添加其他一些内容。就像重构应用程序类以使用DaggerApplication对其进行扩展,并在您的情况下添加重构ApplicationComponent一样。请浏览dagger-android文档,或者浏览我写过的文章。

https://medium.com/@ninad458/exploring-android-dagger-9c325c6acfe3

仅需满足先决条件即可。