3 回答
TA贡献2011条经验 获得超2个赞
您可以Activity
按照当前绑定 实例的相同方式绑定 的实例Application
,即使用 an@Component.Builder
或@Component.Factory
。
示例实现如下所示:
@Subcomponent(...)
interface ActivitySubcomponent {
@Subcomponent.Factory
interface Factory {
ActivitySubcomponent create(@BindsInstance MyActivity activity)
}
}
@Module(subcomponents = [ActivitySubcomponent.class])
class ApplicationModule {
....
}
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
...
((MyApplication) getApplication())
.applicationComponent
.activitySubcomponentFactory()
.create(this)
.inject(this)
}
}
TA贡献1890条经验 获得超9个赞
@Module
class MainActivityModule(mActivity: MainActivity) {
var mActivity: MainActivity
init {
this.mActivity= mActivity
}
@Singleton
@Provides
fun getMainActivity(): MainActivity{
return mActivity
}
}
现在将此模块添加到您的组件类中,并在使用组件构建器时将您的活动传递给模块构造函数希望这可以帮助您。
TA贡献1818条经验 获得超3个赞
我们可以通过添加 @Named 注解来区分 ActivityModule 和 ContextModule 中的方法 context() ,如下所示:
@Module
public class ActivityModule {
private final Context context;
ActivityModule(Activity context){
this.context = context;
}
@Named("activity_context")
@Provides
public Context context(){ return context; }
}
@Module
public class ContextModule {
private final Context context;
ActivityModule(Activity context){
this.context = context;
}
@Named("application_context")
@Provides
public Context context(){ return context.getApplicationContext(); }
然后,我们告诉 Dagger 使用各自的 Context,如下所示:
@Module(includes = ContextModule.class)
public class OkHttpClientModule {
....
@Provides
public File file(@Named("application_context") Context context){
File file = new File(context.getCacheDir(), "HttpCache");
file.mkdirs();
return file;
}
....
}
希望这可以帮助。
添加回答
举报