不build议使用Dagger 2.2组件构build器模块方法

我开始使用dagger 2.2,并且不推荐使用“组件”构build器中的模块方法。

这是我的应用程序组件:

@Component(modules = ApplicationModule.class) public interface ApplicationComponent { void inject(Application application); } 

和应用程序模块:

 @Module public class ApplicationModule { Application application; public ApplicationModule(Application application) { this.application = application; } @Provides @Singleton Application providesApplication() { return application; } } 

这里是生成的类:

 @Generated( value = "dagger.internal.codegen.ComponentProcessor", comments = "https://google.github.io/dagger" ) public final class DaggerApplicationComponent implements ApplicationComponent { private DaggerApplicationComponent(Builder builder) { assert builder != null; } public static Builder builder() { return new Builder(); } public static ApplicationComponent create() { return builder().build(); } @Override public void inject(Application application) { MembersInjectors.<Application>noOp().injectMembers(application); } public static final class Builder { private Builder() {} public ApplicationComponent build() { return new DaggerApplicationComponent(this); } /** * @deprecated This module is declared, but an instance is not used in the component. This method is a no-op. For more, see https://google.github.io/dagger/unused-modules. */ @Deprecated public Builder applicationModule(ApplicationModule applicationModule) { Preconditions.checkNotNull(applicationModule); return this; } } } 

如果不使用ComponentBuilder,我该如何初始化组件?

您应该阅读为什么不推荐使用的描述。 如果您使用IntelliJ或Android Studio等IDE,则只需select该方法,然后在Windows上点击Control + Q即可阅读包含弃用声明的Javadoc。

Javadoc写道:

@deprecated声明了这个模块,但是组件中没有使用实例。 这种方法是没有操作的。 有关更多信息,请参阅https://google.github.io/dagger/unused-modules

从这个链接你可以看到:

当Dagger处理器生成组件时,只需要明确需要提供绑定请求的模块和组件依赖关系的实例。

  • 如果组件中使用的所有模块的方法都是静态的,Dagger完全不需要该模块的实例。 匕首可以直接调用静态方法,而不需要模块。
  • 如果一个模块没有为一个Component提供绑定,那么就不需要该模块的实例来构build该图。

可以肯定地说,你可以忽略这个弃用。 它旨在通知您未使用的方法和模块。 只要你实际需要/使用Application在你的子图中的某个地方,该模块将被需要,而弃用警告将消失。

它显示已被弃用,因为您没有在应用程序中使用组件和模块

 @Inject SomeObjectFromModule mSomeObject 

如果不在应用程序中注入依赖关系,则不需要初始化组件,所以匕首至less要查找一个用法

一旦你添加这些行,你想要注入视图的任何类,然后清理生成和重build项目,你的弃用将被解决

我有与主机相同的问题,我只是希望每个人都已弃用的问题上生成组件生成器类应检查两件事情来节省时间:

1 /更正模块的匕首语法,组件也仔细检查你注入的地方。

2 /必须有注入对象(注入注释和它的对象)在你想要注入的地方,否则匕首编译器无法看到哪里使用你的模块,所以一些方法将被弃用。只需注入至less一个模块的提供给您的注入地点和重新编译代码,你不会有这个问题了:)