Kav*_*avi 5 android dagger dagger-2
以前使用Dagger 2.10时,我使用了一个非常典型的设置,ActivitySubcomponent其中有一个ActivityModule,该Activity实例将实例提供给图形/将其暴露给图,以注入到需要它的其他类中。
用ActivityModule这样的:
@Module
public class ActivityModule {
private final Activity activity;
public ActivityModule(Activity activity) {
this.activity = activity;
}
/**
* Expose the activity to the graph.
*/
@Provides @ActivityScope
Activity activity() {
return activity;
}
}
Run Code Online (Sandbox Code Playgroud)
可以Activity通过ActivityModule在注入之前创建一个新的实例来获取实例:
@Inject PermissionsHelper permissionsHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DaggerApplicationComponent.builder()
.applicationModule(new ApplicationModule(getApplicationContext()))
.plus(new ActivityModule(this))
.inject(this);
}
Run Code Online (Sandbox Code Playgroud)
我可以提供Activity以下内容:
@ActivityScope
public class PermissionsHelper {
private final Activity activity;
@Inject
PermissionsHelper(Activity activity) {
this.activity = activity;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,在迁移到新dagger-android设置后(以此为指南),我不再可以轻松访问Activity实例,而不必为每个注入的活动创建单独的模块,然后将其实例绑定到Activity对象,如下所示:
@Module
abstract class ActivityBindingModule {
@ActivityScope
@ContributesAndroidInjector(modules = arrayOf(SomeActivityModule::class))
abstract fun someActivity(): SomeActivity
}
Run Code Online (Sandbox Code Playgroud)
...
@Module
abstract class SomeActivityModule {
/**
* Expose the activity to the graph.
*/
@Binds
abstract fun bindActivity(someActivity: SomeActivity): Activity
}
Run Code Online (Sandbox Code Playgroud)
在使用新dagger-android内容时,对于要让其种子实例暴露于图形的每个Activity,是否有任何方法可以避免创建模块并将其绑定的最后一步?
| 归档时间: |
|
| 查看次数: |
202 次 |
| 最近记录: |