所以我正在开发具有MVP模式的应用程序,并且在使用Dagger2时遇到问题
我已经为演示者创建了一个名为HelloPresenter的界面。
然后我为该接口创建了一个名为HelloPresenterImpl的实现。
我的HelloPresenter
public interface HelloPresenter {
public void sayHello();
}
我的HelloPresenterImpl
public class HelloPresenterImpl implements HelloPresenter {
StoryView storyView;
@Inject
public HelloPresenterImpl(StoryView storyView) {
this.storyView = storyView;
}
@Override
public void sayHello() {
Log.d(TAG, "hello there");
}
}
我的组件
@UserScope
@Component(dependencies = NetComponent.class, modules = RetrofitModule.class)
public interface StoryComponent {
void inject(MainActivity activity);
void inject(HelloPresenter helloPresenter);
}
我的模块
@Module
public class HelloModule {
@Provides
public HelloPresenter providesHelloPresenter(final HelloPresenterImpl presenter){
return presenter;
}
}
我的BaseApplication
public class BaseApplication extends Application {
private NetComponent mNetComponent;
private StoryComponent mStoryComponent;
@Override
public void onCreate() {
super.onCreate();
mNetComponent = DaggerNetComponent.builder()
.appModule(new AppModule(this))
.netModule(new NetModule())
.build();
mStoryComponent = DaggerStoryComponent.builder()
.netComponent(mNetComponent)
.retrofitModule(new RetrofitModule())
.storyModule(new StoryModule())
.build();
}
public NetComponent getNetComponent() {
return mNetComponent;
}
public StoryComponent getStoryComponent() {
return mStoryComponent;
}
现在,当我尝试将其注入到MainActivity中时,会引发错误消息
错误:(18、10)错误:com.exampleapp.Hello.presenter.HelloPresenter
如果没有@ Provides-或@ Produces-注释,则无法提供
方法。 com.exampleapp.Hello.presenter.HelloPresenter在以下位置注入
com.exampleapp.Hello.MainActivity.HelloPresenter
com.exampleapp.Hello.MainActivity在以下位置注入
com.exampleapp.di.components.HelloComponent.inject( Activity )
public class MainActivity extends AppCompatActivity {
@Inject
SharedPreferences mSharedPreferences;
@Inject
StoryInterface storyInterface;
@Inject
HelloPresenter helloPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
((BaseApplication) getApplication()).getStoryComponent().inject(this);
helloPresenter.sayHello(); // This throws an Error
}
请有人能指出正确的方向吗?谢谢
最佳答案
在没有看到整个项目的情况下,我的猜测是Dagger无法确定如何创建HelloPresenterImpl
实例,因为您没有提供StoryView
。我认为您需要:
@Provides
public StoryView providesStoryView() {
return new StoryView();
}