gpt4 book ai didi

android - Dagger : Why does dagger require a @inject constructor for an object that does't depend on another object

转载 作者:搜寻专家 更新时间:2023-11-01 09:34:19 25 4
gpt4 key购买 nike

我想我错过了什么。我收到此错误:

PostsVM cannot be provided without an @Inject constructor or from an 
@Provides-annotated method.

假设类如下:

@Module
public class AppModule {
private final Application mApplication;

@Singleton
@Provides
ViewModel provideListViewModel() {
return new PostsVM();
}
}

还有一个类PostVM

@Singleton
public class PostsVM extends ViewModel {

public boolean get(){
return true;
}
}

还有一个组件:

@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {

void inject(Global global);

void inject(MainActivity mainActivity);

@Architecture.ApplicationContext
Context getContext();

Application getApplication();
}

在 Activity 中:

@Inject
public ViewModelProvider.Factory factory;

@Override
protected void onCreate(Bundle savedInstanceState) {
InjectorClass.inject(this);

如您所见,为 PostVM 类给出的示例不依赖于任何东西,为什么我需要在其中使用 @inject 构造函数?

最佳答案

tl;dr 防止错误并遵守约定。


@Inject 的 JavaDoc 中你可以读到:

Injectable constructors are annotated with @Inject and accept zero or more dependencies as arguments. @Inject can apply to at most one constructor per class.

遵循约定/文档始终是一种很好的做法。


所以 @Inject 为 Dagger 标记了一个入口点,以指示它如何以及在何处创建您的类。这是您打算如何使用您的类(class)的明确标志。

  • 如果您有多个构造函数怎么办?
  • 如果您需要额外的设置并且应该使用 @Module 怎么办?

通过仅默认为无参数构造函数(如果可能),事情可能会很容易开始崩溃,如果您只是假设 Dagger 完成其工作,您可能无法轻松查明来源。

__ cannot be provided without an @Inject constructor or from an @Provides-annotated method.

另一方面,这个错误给了你一个强烈的信号,表明你遗漏了一些东西,这是不容忽视的。

关于android - Dagger : Why does dagger require a @inject constructor for an object that does't depend on another object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44670859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com