Kotlinはダガー2を使用しています
2904 ワード
環境設定注釈表示構造方法を用いる 注釈表示変数を使用する Componentを使用して連絡を作成する コンパイルして、コンパイルして、Daggarの先頭のComponentファイル を自動的に生成します.注入登録 @Module工場注入 1.必要なインスタンスを作成するクラス .例の化学工場及び方法 を作成する..ComponentとModule関連 .コンパイルDaggar先頭の対応するファイル を自動的に生成する..登録 再帰的注入(構造方法と工場との結合) MainServiceImpl構造方法を@Inject表記 を使用する.工場方法は、 に変更されました.
//gradle
apply plugin: 'kotlin-dapt'
//
compile "com.google.dagger:dagger:2.14.1"
kapt "com.google.dagger:dagger-compiler:2.14.1"
@Inject構造方法注入class MainPresenter @Inject constructor() {
fun doSomething():String{
return "This is result"
}
}
@Inject
lateinit var mPresenter:MainPresenter
@Component
interface MainComponent {
fun inject(activity:MainActivity)
}
class MainActivity: AppCompatActivity() {
@Inject
lateinit var mPresenter:MainPresenter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//
initInjection()
mClickBtn.setOnClickListener {
toast(mPresenter.doSomething())
}
}
/* Dagger2 */
private fun initInjection() {
DaggerMainComponent.builder().build().inject(this)
}
}
interface MainService {
fun getMainInfo():String
}
class MainServiceImpl:MainService {
override fun getMainInfo():String {
return "This is main info"
}
}
// MainActivity
@Inject
lateinit var mMainService:MainService
@Module
class MainModule {
@Provides
fun provideMainService():MainService {
return MainServiceImpl()
}
}
@Component(modules = [(MainModule::class)])
interface MainComponent {
fun inject(activity:MainActivity)
}
class MainActivity: AppCompatActivity() {
@Inject
lateinit var mMainService:MainService
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//
initInjection()
mClickBtn.setOnClickListener {
toast(mMainService.getMainInfo())
}
}
/* Dagger2 */
private fun initInjection() {
DaggerMainComponent.builder().mainModule(MainModule()).build().inject(this)
}
}
class MainServiceImpl @Inject constructor():MainService {
override fun getMainInfo():String {
return "This is main info"
}
}
@Provides
fun provideMainService(service:MainServiceImpl):MainService {
return service
}