这是一个典型问题,因为这是Dagger 2的常见错误.
如果您的问题被标记为重复,请仔细阅读本文,并确保了解此错误的含义及其发生的原因.如果你一定要包括这个职位不工作在那里和如何您提供提到的类,并包括完整的错误消息,在最后的一个你的问题.
我尝试使用Dagger 2的依赖项,但是当我尝试编译项目时收到以下错误:
错误: com.example.如果没有@Inject构造函数或@ Provide -annotated方法,则无法提供MyDependency.
com.示例.MyDependency在
com.example.MyComponent.myDependency()中提供
这是什么意思,我该如何解决?
我有一个组件,并试图提供依赖.我的基本设置如下:
// this is the dependency I try to use
class MyDependency {}
@Component
interface MyComponent {
// I want to make it accessible to be used with my component
MyDependency myDependency();
}
Run Code Online (Sandbox Code Playgroud) 我有一个小场景,我有以下结构,我试图在baseActivity Fragment中注入片段管理器,但由于某种原因,我运气不好:(
@Singleton
@Component(modules = { AppModule.class,
ActivityModule.class,
AndroidSupportInjectionModule.class })
public interface AppComponent extends AndroidInjector<App> {
@Override
void inject(App application);
@Component.Builder interface Builder {
@BindsInstance
AppComponent.Builder application(App application);
AppComponent build();
}
}
Run Code Online (Sandbox Code Playgroud)
ActivityModule.class
@PerActivity
@ContributesAndroidInjector(modules = BaseActivityModule.class)
abstract BaseActivity baseActivity();
Run Code Online (Sandbox Code Playgroud)
BaseActivityModule.class
static final String ACTIVITY_FRAGMENT_MANAGER = "ACTIVITY_FRAGMENT_MANAGER";
@PerActivity
@Named(ACTIVITY_FRAGMENT_MANAGER)
@Provides
static FragmentManager activityFragmentManager(BaseActivity activity) {
return activity.getSupportFragmentManager();
}
Run Code Online (Sandbox Code Playgroud)
BaseAcitivity.class
public abstract class BaseActivity extends DaggerAppCompatActivity {
@Named(ACTIVITY_FRAGMENT_MANAGER)
@Inject
FragmentManager fragmentManager;
}
Run Code Online (Sandbox Code Playgroud)
所以即使我在BaseActivityModule.class中提供我的片段管理器,dagger也会抛出以下错误.我甚至尝试使用Activity而不是BaseActivity作为BaseActivityModule中的输入参数.即使这样,我也会遇到同样的问题.不确定到底是什么搞砸了.所以任何帮助都表示赞赏.提前致谢 :)
Error:(17, 8) error: [dagger.android.AndroidInjector.inject(T)] @javax.inject.Named("ACTIVITY_FRAGMENT_MANAGER") android.support.v4.app.FragmentManager cannot …Run Code Online (Sandbox Code Playgroud)