日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NSkyKit 项目实践-Dagger2

發(fā)布時間:2025/6/17 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NSkyKit 项目实践-Dagger2 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

kotlin中配置Dagger2

  • 在app模塊的build.gradle文件中進行如下配置,
//daggerapi "com.google.dagger:dagger:$dagger_version"annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"api "com.google.dagger:dagger-android:$dagger_version"api "com.google.dagger:dagger-android-support:$dagger_version"annotationProcessor "com.google.dagger:dagger-android-processor:$dagger_version" 復(fù)制代碼
  • 相關(guān)常用注解:
@Inject @Component @Module @Provides @Qualifier和@Named @Scope和@Singleton 復(fù)制代碼

@Inject

@Inject注解只是JSR-330中定義的注解,在javax.inject包中。 這個注解本身并沒有作用,它需要依賴于注入框架才具有意義,可以用來標記構(gòu)造函數(shù)、屬性和方法。

標記構(gòu)造函數(shù) 被標記的構(gòu)造函數(shù)可以有0個或多個依賴作為參數(shù)。 同一個類中最多只可以標記一個構(gòu)造函數(shù)。

class People @Inject constructor(val name:String = "Tom") 復(fù)制代碼

注意在kotlin中這種寫法是不被允許的,因為這等價于java中的多個構(gòu)造方法People(String name), People(),正確的寫法應(yīng)該是這樣:

data class People constructor(val name: String) {@Injectconstructor() : this("Tom") } 復(fù)制代碼

標記屬性

被標記的屬性不能是final的,kotlin中不能是val。 被注入進的屬性不能用private修飾(是Dagger2不支持,而非@Inject不支持)

@Injectlateinit var people:People 復(fù)制代碼

標記方法

被標記的方法可以有0個或多個依賴作為參數(shù)。 方法不能是抽象的。

class HomeActivity : AppCompatActivity() {private lateinit var people:People@Injectfun setPeople(people:People){this.people = people} } 復(fù)制代碼

這種方法注入和屬性注入并沒有什么本質(zhì)上的不同,實現(xiàn)效果也基本一樣。還有一種做法是@Inject標記被注入類的某個方法,該方法會在類的構(gòu)造方法之后接著被調(diào)用:

data class People constructor(val name: String) {@Injectconstructor() : this("Tom")init {println("init:$name")}@Injectfun hello(){println("hello:$name")} }class HomeActivity : AppCompatActivity() {@Injectlateinit var people:Peopleoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_home)//執(zhí)行相關(guān)注入操作...println(people.toString())} }復(fù)制代碼

運行結(jié)果是這樣的:

01-02 11:57:30.995 16601-16601/? I/System.out: init:Tom 01-02 11:57:30.995 16601-16601/? I/System.out: hello:Tom 01-02 11:57:30.995 16601-16601/? I/System.out: People(name=Tom) 復(fù)制代碼

項目相關(guān)代碼

application

class SkyApplication:DaggerApplication(){override fun applicationInjector(): AndroidInjector<out DaggerApplication> {return DaggerApplicationComponent.builder().create(this)}override fun onCreate() {super.onCreate()CoreAppExt.onCreate(this, true)}override fun attachBaseContext(base: Context?) {super.attachBaseContext(base)CoreAppExt.attachBaseContext(base)} } 復(fù)制代碼

xxxDaggerActivity

由于只能單繼承,使用dagger時繼承CoreDaggerActivity,CoreDaggerFragment,代碼和 DaggerActivity、CoreDaggerFragment 相同;
不使用時,可以直接繼承CoreActivity,CoreFragment;

abstract class CoreDaggerActivity : CoreActivity(), HasFragmentInjector, HasSupportFragmentInjector {@Injectlateinit var supportFragmentInjector: DispatchingAndroidInjector<Fragment>@Injectlateinit var frameworkFragmentInjector: DispatchingAndroidInjector<android.app.Fragment>override fun onCreate(savedInstanceState: Bundle?) {AndroidInjection.inject(this)super.onCreate(savedInstanceState)}override fun supportFragmentInjector(): AndroidInjector<Fragment>? {return supportFragmentInjector}override fun fragmentInjector(): AndroidInjector<android.app.Fragment>? {return frameworkFragmentInjector} } 復(fù)制代碼abstract class CoreDaggerFragment<T : ViewDataBinding> : CoreFragment<T>(), HasSupportFragmentInjector {@Injectlateinit var childFragmentInjector: DispatchingAndroidInjector<Fragment>override fun onAttach(context: Context?) {AndroidSupportInjection.inject(this)super.onAttach(context)}override fun supportFragmentInjector(): AndroidInjector<Fragment>? {return childFragmentInjector} } 復(fù)制代碼

ApplicationComponent

@Singleton @Component(modules = [AndroidSupportInjectionModule::class,ActivityModule::class,SupportFragmentModule::class,MainDaggerModule::class,HomeDaggerModule::class] ) interface ApplicationComponent : AndroidInjector<SkyApplication> {@Component.Builderabstract class Builder : AndroidInjector.Builder<SkyApplication>()} 復(fù)制代碼

ActivityModule、SupportFragmentModule

@Module abstract class ActivityModule {@ContributesAndroidInjectorabstract fun contributeMainActivity(): MainActivity }/*** SupportFragment Dagger2 Module*/ @Module abstract class SupportFragmentModule {@ContributesAndroidInjectorabstract fun contributeCatalogFragment(): HomeFragment@ContributesAndroidInjectorabstract fun contributeDiscoverFragment(): DiscoverFragment@ContributesAndroidInjectorabstract fun contributeSettingFragment(): SettingFragment} 復(fù)制代碼

MainActivity

class MainActivity : CoreDaggerActivity(), BottomNavigationView.OnNavigationItemSelectedListener {@Injectlateinit var mMainViewModel: MainViewModelvar mDataBingding: ActivityMainBinding? = nullprivate var mAdapter: CoreFragmentPagerAdapter? = nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)mDataBingding = bindingContentView(R.layout.activity_main)setUpNavigation()setUpViewPager()NSkyLog.d(TAG, "MainViewModel ${mMainViewModel.doSomething()}")}復(fù)制代碼

結(jié)果信息

2019-02-18 18:32:27.279 20743-20768/? I/com.nsky.app_LOGGER: ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────── 2019-02-18 18:32:27.280 20743-20768/? I/com.nsky.app_LOGGER: │ Thread: pool-1-thread-1 2019-02-18 18:32:27.280 20743-20768/? I/com.nsky.app_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 2019-02-18 18:32:27.280 20743-20768/? I/com.nsky.app_LOGGER: │ NSkyLog.i (NSkyLog.java:82) 2019-02-18 18:32:27.280 20743-20768/? I/com.nsky.app_LOGGER: │ NSkyLog$DefaultLogDelegate.i (NSkyLog.java:48) 2019-02-18 18:32:27.280 20743-20768/? I/com.nsky.app_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 2019-02-18 18:32:27.280 20743-20768/? I/com.nsky.app_LOGGER: │ CoreAppExt:onCreate 2019-02-18 18:32:27.280 20743-20768/? I/com.nsky.app_LOGGER: └──────────────────────────────────────────────────────────────────────────────────────────────────────────────── 2019-02-18 18:32:27.451 20743-20743/? D/com.nsky.app_LOGGER: ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────── 2019-02-18 18:32:27.452 20743-20743/? D/com.nsky.app_LOGGER: │ Thread: main 2019-02-18 18:32:27.452 20743-20743/? D/com.nsky.app_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 2019-02-18 18:32:27.452 20743-20743/? D/com.nsky.app_LOGGER: │ NSkyLog.d (NSkyLog.java:88) 2019-02-18 18:32:27.452 20743-20743/? D/com.nsky.app_LOGGER: │ NSkyLog$DefaultLogDelegate.d (NSkyLog.java:53) 2019-02-18 18:32:27.452 20743-20743/? D/com.nsky.app_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 2019-02-18 18:32:27.452 20743-20743/? D/com.nsky.app_LOGGER: │ MainActivity:MainViewModel This is MainViewModel 2019-02-18 18:32:27.452 20743-20743/? D/com.nsky.app_LOGGER: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────復(fù)制代碼

項目地址: NSkyKit

轉(zhuǎn)載于:https://juejin.im/post/5c5163126fb9a049cb19298d

總結(jié)

以上是生活随笔為你收集整理的NSkyKit 项目实践-Dagger2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。