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;
}
....
}
希望這可以幫助。
添加回答
舉報