日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

NSkyKit 项目实践-Dagger2

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

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" 復制代碼
  • 相關常用注解:
@Inject @Component @Module @Provides @Qualifier和@Named @Scope和@Singleton 復制代碼

@Inject

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

標記構造函數 被標記的構造函數可以有0個或多個依賴作為參數。 同一個類中最多只可以標記一個構造函數。

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

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

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

標記屬性

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

@Injectlateinit var people:People 復制代碼

標記方法

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

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

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

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)//執行相關注入操作...println(people.toString())} }復制代碼

運行結果是這樣的:

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) 復制代碼

項目相關代碼

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)} } 復制代碼

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} } 復制代碼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} } 復制代碼

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>()} 復制代碼

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} 復制代碼

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()}")}復制代碼

結果信息

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: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────復制代碼

項目地址: NSkyKit

轉載于:https://juejin.im/post/5c5163126fb9a049cb19298d

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。