热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如果没有@Provide-或@Produces-annotated方法,则无法提供Dagger2

如何解决《如果没有@Provide-或@Produces-annotated方法,则无法提供Dagger2》经验,为你挑选了1个好方法。

所以我正在开发一个带有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)错误:如果没有@ Provide-或@ Produces-annotated方法,则无法提供com.exampleapp.Hello.presenter.HelloPresenter.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

    }

请有人指出我正确的方向吗?谢谢



1> pt2121..:

没有看到整个项目,我的猜测是Dagger无法想象如何创建HelloPresenterImpl实例,因为你没有提供StoryView.我想你需要:

@Provides
public StoryView providesStoryView() {
    return new StoryView();
}


谢谢您的帮助 !
推荐阅读
author-avatar
用户f2r3o98akh
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有