首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dagger不会为Android生成Dagger类

Dagger不会为Android生成Dagger类
EN

Stack Overflow用户
提问于 2016-12-19 03:11:12
回答 1查看 314关注 0票数 0

我正试着和达格建立一个项目。现在,当我构建时,没有为组件生成任何Dagger*类,并且我得到以下错误:

代码语言:javascript
复制
Error:(10, 8) error: [com.redditapp.dagger.RedditAppGraph.inject(com.redditapp.RedditApplication)]
com.redditapp.ui.ActivityHierarchyServer cannot be provided without an @Provides- or @Produces-annotated method.
com.redditapp.ui.ActivityHierarchyServer is injected at
com.redditapp.RedditApplication.activityHierarchyServer
com.redditapp.RedditApplication is injected at
com.redditapp.dagger.RedditAppGraph.inject(app)

代码语言:javascript
复制
Error:(13, 10) error: com.redditapp.base.navigation.activity.ActivityScreenSwitcher cannot be provided without an @Inject constructor or from an @Provides-annotated method.
com.redditapp.base.navigation.activity.ActivityScreenSwitcher is injected at
com.redditapp.ui.screens.home.HomePresenter.<init>(screenSwitcher)
com.redditapp.ui.screens.home.HomePresenter is injected at
com.redditapp.ui.screens.home.HomeActivity.presenter
com.redditapp.ui.screens.home.HomeActivity is injected at
com.redditapp.ui.screens.home.HomeComponent.inject(activity)

这是我目前的设置。

应用程序级类使用:

代码语言:javascript
复制
public void buildComponentAndInject() {
        component = RedditAppComponent.Initializer.init(this);
        component.inject(this);
    }

RedditAppComponent看起来是这样的,DaggerRedditAppComponent不是生成的,因此是红色的:

代码语言:javascript
复制
@ApplicationScope
@Component(modules = { RedditAppModule.class, UiModule.class})
public interface RedditAppComponent extends RedditAppGraph {
    /**
     * An initializer that creates the graph from an application.
     */
    final class Initializer {
        public static RedditAppComponent init(RedditApplication app) {
            return DaggerRedditAppComponent.builder()
                    .redditAppModule(new RedditAppModule(app))
                    .uiModule(new UiModule())
                    .build();
        }
        private Initializer() {} // No instances.
    }
}

使用父类RedditAppGraph:

代码语言:javascript
复制
public interface RedditAppGraph {
    void inject(RedditApplication app);
    ViewContainer viewContainer();
    ActivityHierarchyServer activityHierarchyServer();
}

包含引发错误的提供程序方法的UI模块如下所示:

代码语言:javascript
复制
@Module
public class UiModule {

    @Provides
    @ApplicationScope
    ActivityScreenSwitcher provideActivityScreenSwitcher() {
        return new ActivityScreenSwitcher();
    }

    @Provides
    @ApplicationScope
    @ActivityScreenSwitcherServer
    ActivityHierarchyServer provideActivityHierarchyServer(final ActivityScreenSwitcher screenSwitcher) {
        return new ActivityHierarchyServer.Empty() {
            @Override
            public void onActivityStarted(Activity activity) {
                screenSwitcher.attach(activity);
            }

            @Override
            public void onActivityStopped(Activity activity) {
                screenSwitcher.detach();
            }
        };
    }
}

我已经尝试过重新构建这个项目,看看它是否会生成类。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-19 17:36:07

看起来ActivityScreenSwitcherServer是一个限定符。如果是这样的话,您将使用限定符绑定您的ActivityHierarchyServer,但是在没有它的组件上(通过RedditAppGraph)公开ActivityHierarchyServer。从@Provides方法中移除限定符或将其添加到组件接口中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41215265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档