我怎样才能注入对象到android kotlin MVP mosby应用程序与匕首的主持人

我试图让我的应用程序中的匕首工作。 创建模块组件和MyApp后,我可以使用匕首注入数据库服务,但我有麻烦与演示者做同样的事情。 码:

class MyApp : Application() { var daoComponent: DaoComponent? = null private set override fun onCreate() { super.onCreate() daoComponent = DaggerDaoComponent.builder() .appModule(AppModule(this)) // This also corresponds to the name of your module: %component_name%Module .daoModule(DaoModule()) .build() } } 

 @Module class DaoModule { @Provides fun providesEstateService(): EstateService = EstateServiceImpl() } 

零件

 @Singleton @Component(modules = arrayOf(AppModule::class, DaoModule::class)) interface DaoComponent { fun inject(activity: MainActivity) } 

的AppModule

 @Module class AppModule(internal var mApplication: Application) { @Provides @Singleton internal fun providesApplication(): Application { return mApplication } } 

主要活动

 class MainActivity : MvpActivity<MainView, MainPresenter>(), MainView { @Inject lateinit var estateService : EstateService override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) (application as MyApp).daoComponent!!.inject(this)estateService.numberOfInvoicedEstates.toString() } override fun createPresenter(): MainPresenter = MainPresenterImpl() } 

以这种方式注入estateService后,我可以使用它,但我不知道如何直接注入服务提交者。 我试过这样做,但它不工作。 我应该只是从活动传递注入的对象? 或者我应该通过MyApp作为参数或使静态方法允许我从应用程序的任何地方得到它?

 class MainPresenterImpl @Inject constructor(): MvpBasePresenter<MainView>(),MainPresenter { @Inject lateinit var estateService : EstateService } 

您的组件应该提供这样的演示者:

 @Component(modules = arrayOf(AppModule::class, DaoModule::class)) @Singleton interface MyComponent { mainPresenter() : MainPresenter } 

演示者需要的所有依赖通过构造参数注入演示者:

 class MainPresenterImpl @Inject constructor(private val estateService : EstateService ) : MvpBasePresenter<MainView>(),MainPresenter { ... } 

比在createPresenter()只是从这样的匕首组件获取演示者:

 class MainActivity : MvpActivity<MainView, MainPresenter>(), MainView { ... override fun createPresenter(): MainPresenter = (application as MyApp).myComponent().mainPresenter() } 

请注意,上面显示的代码不会被编译。 这只是伪代码给你一个想法如何在Dagger中的依赖关系图。

请参考这个例子,了解如何将Dagger 2与MVP结合使用。

你必须告诉你的组件你要注入的地方。

所以,试试这个组件:

 @Singleton @Component(modules = arrayOf(AppModule::class, DaoModule::class)) interface DaoComponent { fun inject(presenter: MainPresenterImpl) }