我正在努力绕过Dagger 2
,我遇到了一个我不确定如何正确解决的情况。我正在使用dagger.android
为我的每个活动和片段设置subcomponents
,其中每个子组件都有一个带有它自己的依赖项的演示者。
问题是一个片段应该显示从网络上获取的信息,所以我将URL
传递给片段,告诉它要显示什么。但我不确定如何让Dagger
解决对片段加载的依赖性。我以为我需要一个subcomponent builder
,但这显然是多余的,因为编译器消息告诉我它需要来自URL
方法的Provides
。我还为URL
设置了一个限定符,并使用它在片段中注释了一个方法。我以为Dagger
可能会捡到它,但我错了。有人能告诉我如何最好地处理这种情况吗?
答案 0 :(得分:4)
如果我没有错,您正试图通过url
在Fragment
中提供Bundle
依赖关系。在这种情况下,在Provides
中添加Module
方法,该方法将Fragment
作为参数。由于Fragment
实例位于graph
,它会自动满足。
片段:
@Inject
String url;
public static DetailFragment newInstance() {
Bundle args = new Bundle();
args.putString("url", "http://stackoverflow.com/");
DetailFragment fragment = new DetailFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public void onAttach(Context context) {
AndroidSupportInjection.inject(this);
super.onAttach(context);
printInfo();
}
public void printInfo(){
if (url == null) {
Log.i(TAG, "Url is null");
}else {
Log.i(TAG, "Url: " + url);
}
}
<强>模块:强>
@Module
public class DetailFragmentModule {
@Provides
String provideUrl(DetailFragment detailFragment){
Bundle bundle = detailFragment.getArguments();
String url = bundle.getString("url");
return url;
}
@Provides
DetailFragmentView provideDetailFragmentView(DetailFragment detailFragment){
return detailFragment;
}
}
当您在url
中注入DetailFragment
时,它将转到provideUrl
方法并满足DetailFragment
,它将从url
返回Bundle
这对我有用。 :)