我怎样才能注入对象到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) }