我开始使用dagger 2.2并且不推荐使用"组件"构建器中的模块方法.
这是我的应用程序组件:
@Component(modules = ApplicationModule.class)
public interface ApplicationComponent {
void inject(Application application);
}
Run Code Online (Sandbox Code Playgroud)
和应用程序模块:
@Module
public class ApplicationModule {
Application application;
public ApplicationModule(Application application) {
this.application = application;
}
@Provides
@Singleton
Application providesApplication() {
return application;
}
}
Run Code Online (Sandbox Code Playgroud)
这是生成的类:
@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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果没有使用ComponentBuilder,如何初始化组件?
Dav*_*jak 165
您应该阅读不推荐使用原因的说明. 如果您使用的是IntelliJ或Android Studio等IDE,则只需选择方法并按Windows上的Control+ Q即可阅读包含弃用通知的Javadoc.
Javadoc读到:
@deprecated声明此模块,但组件中未使用实例.这种方法是无操作的.有关更多信息,请参阅https://google.github.io/dagger/unused-modules.
从这个链接你可以看到:
当Dagger处理器生成组件时,它只需要明确需要的模块和组件依赖项实例来提供绑定请求.
- 如果组件中使用的所有模块方法都是静态的,则Dagger根本不需要该模块的实例.Dagger可以在没有模块的情况下直接调用静态方法.
- 如果模块没有为Component提供绑定,则构造图形不需要该模块的实例.
可以肯定地说,您可以忽略弃用.它旨在通知您未使用的方法和模块.一旦您实际需要/使用Application子图中的某个地方,就需要使用该模块,并且弃用警告将消失.
sak*_*ham 43
它显示已弃用,因为您没有在应用程序中使用组件和模块
@Inject
SomeObjectFromModule mSomeObject
Run Code Online (Sandbox Code Playgroud)
如果您没有在应用程序中注入依赖项,则不会使用初始化组件,因此dagger至少要查找一次使用
一旦在要注入视图的任何类中添加这些行,然后清理构建并重建项目,您的弃用就会得到解决
当我Module没有@Provides方法或提供的对象Dagger未在应用程序中使用时,它显示错误。
删除不推荐使用的模块的示例
模块
@Module
public class SecondActivityModule {
@Provides
Book provideBookTest() {
return new Book();
}
}
Run Code Online (Sandbox Code Playgroud)
活动
public class SecondActivity extends AppCompatActivity {
@Inject
Book test;
...
}
Run Code Online (Sandbox Code Playgroud)
或在组件中
@Component(modules = SecondModule.class)
public interface SecondComponent {
void inject(SecondActivity activity);
Book getBookTest();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32201 次 |
| 最近记录: |