无法在Java Android中使用dagger2在片段中注入依赖项
作者:互联网
我能够在活动及其工作中注入依赖性.但是在片段中调用相同的依赖项不会获得访问权限.
这就是我所做的.
应用程式Java
public class App extends MultiDexApplication implements HasActivityInjector, HasFragmentInjector {
@Inject
DispatchingAndroidInjector<Activity> activityInjector;
@Inject
DispatchingAndroidInjector<Fragment> fragmentInjector;
private AppComponent mComponent;
@Override
public void onCreate() {
super.onCreate();
mComponent = DaggerAppComponent.builder().application(this).build();
mComponent.inject(this);
}
@Override
public DispatchingAndroidInjector<Activity> activityInjector() {
return activityInjector;
}
@Override
public AndroidInjector<Fragment> fragmentInjector() {
return fragmentInjector;
}
}
这是AppComponent.Java
@Singleton
@Component(modules = { AndroidInjectionModule.class, ActivityModule.class, FragmentModule.class})
public interface AppComponent extends AndroidInjector<App> {
void inject(App app);
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
AppComponent build();
}
}
这是ActivityModule.Java类
@Module
public abstract class ActivityModule {
@ContributesAndroidInjector
abstract MainActivity contributeMainActivityInjector();
@ContributesAndroidInjector
abstract MyActivity contributeCampaignActivityInjector();
}
这是FragmentModule.java类
@Module
public abstract class FragmentModule {
@ContributesAndroidInjector
abstract MyFragment bindMyFragment();
}
现在在MyFragment类中,我想在其中注入该依赖项.在顶部,我将这些行添加到类中
@Inject
ImageDownloaderApi imageDownloaderApi;
然后检查onCreateView函数,我这样做是为了检查我的依赖项是否像这样工作
boolean injected = imageDownloaderApi == null ? false : true;
Log.d(this.getClass().getSimpleName(), "Dependency worked: "+ String.valueOf(injected));
每次都使我感到虚假.
同样的代码在activites中起作用的地方.
我在活动中要做的另一件事是像这样在onCreate下方添加此行
@Override
protected void onCreate(Bundle savedInstanceState) {
AndroidInjection.inject(this); // this line
super.onCreate(savedInstanceState);
在尝试在片段中的onCreateView中添加同一行时
AndroidInjection.inject(this);
它在此下方显示红线.如果我用getActivity替换它.它给了我运行时错误.
请看看并指导我错了吗?
我为片段执行的过程是否正确?因为它显然在活动中起作用.
在此先感谢您的时间.
解决方法:
我假设您正在使用支持库中的Fragment-s.尝试更改公共类App扩展MultiDexApplication实现HasActivityInjector,HasFragmentInjector到公共类App扩展MultiDexApplication实现HasActivityInjector,HasFragmentInjector,HasSupportFragmentInjector,随后提供适当的注射器.
This is an easy article使该主题更清晰.另外,此处还描述了HasSupportFragmentInjector接口的用法.
标签:android-fragments,dagger-2,dependency-injection,java,android 来源: https://codeday.me/bug/20191108/2007611.html