赞
踩
private val localData: MovieLocalData,
private val remoteData: MovieRemoteData
)
class MovieLocalData @Inject constructor()
@Singleton
class MovieRepository @Inject constructor(
private val localData: MovieLocalData,
private val remoteData: MovieRemoteData
)
@Module
class NetworkModule {
…
@Singleton
@Provides
fun provideLoginService(okHttpClient: OkHttpClient, gsonConverterFactory: GsonConverterFactory): MovieService {
return Retrofit.Builder()
.baseUrl(“http://omdbapi.com/”)
.addConverterFactory(gsonConverterFactory)
.client(okHttpClient)
.build()
.create(MovieService::class.java)
}
}
Dagger2的功能十分强大,上述实战仍有不少未提及的高阶用法,感兴趣者可进一步尝试。
…
Android Studio针对Dagger2的导航进行了支持,方便开发者快速回溯依赖关系。
对于小型项目而言,引入DI框架显得大材小用、大动干戈。而且对于后期接手人员,如果对于DI框架不熟悉的话,维护将变得尤为困难。似乎只有大型项目才能让它自由地施展拳脚。
前些年我在调查某个导航栏Bug的时候查阅过SystemUI的代码,当时意外地发现大量的模块包括StatusBar、Recents、Keyguard等都是DI方式引入的。虽然对Dagger略有耳闻,但仍看得云里雾里,不得其解。
SystemUI作为Android系统里最核心最复杂的App,称之为大型项目毫不过分。现在就来看看Dagger2如何助力这个大型App管理大量的系统组件。
※ 源码版本:Android 11
SystemUI中主要的依赖实例都管理在Denpency类中。
public class Dependency {
…
@Inject @Background Lazy mBackgroundExecutor;
@Inject Lazy mClockManager;
@Inject Lazy mActivityManagerWrapper;
@Inject Lazy mDevicePolicyManagerWrapper;
@Inject Lazy mPackageManagerWrapper;
@Inject Lazy mSensorPrivacyController;
@Inject Lazy mDockManager;
@Inject Lazy mINotificationManager;
@Inject Lazy mSysUiStateFlagsContainer;
@Inject Lazy mAlarmManager;
@Inject Lazy mKeyguardSecurityModel;
@Injec
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。