匕首:为什么匕首需要一个不依赖于另一个对象的对象的@inject构造函数
Dagger : Why does dagger require a @inject constructor for an object that does't depend on another object
我想我错过了什么。我收到此错误:
PostsVM cannot be provided without an @Inject constructor or from an
@Provides-annotated method.
假设 classes 如下:
@Module
public class AppModule {
private final Application mApplication;
@Singleton
@Provides
ViewModel provideListViewModel() {
return new PostsVM();
}
}
还有一个 class 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 class 给出的示例不依赖于任何东西,为什么我需要一个 @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。这是您打算如何使用 class 的明确标志。
- 如果你有多个构造函数怎么办?
- 如果您需要额外的设置并且应该使用
@Module
怎么办?
通过仅默认为无参数构造函数(如果可能),事情可能会很容易开始崩溃,如果您只是假设 Dagger 完成其工作,您可能无法轻松查明来源。
__ cannot be provided without an @Inject constructor or from an @Provides-annotated method.
另一方面,这个错误给了你一个强烈的信号,表明你遗漏了一些东西,这是不容忽视的。
我想我错过了什么。我收到此错误:
PostsVM cannot be provided without an @Inject constructor or from an
@Provides-annotated method.
假设 classes 如下:
@Module
public class AppModule {
private final Application mApplication;
@Singleton
@Provides
ViewModel provideListViewModel() {
return new PostsVM();
}
}
还有一个 class 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 class 给出的示例不依赖于任何东西,为什么我需要一个 @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。这是您打算如何使用 class 的明确标志。
- 如果你有多个构造函数怎么办?
- 如果您需要额外的设置并且应该使用
@Module
怎么办?
通过仅默认为无参数构造函数(如果可能),事情可能会很容易开始崩溃,如果您只是假设 Dagger 完成其工作,您可能无法轻松查明来源。
__ cannot be provided without an @Inject constructor or from an @Provides-annotated method.
另一方面,这个错误给了你一个强烈的信号,表明你遗漏了一些东西,这是不容忽视的。