- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在运行时使用 Hilt 为 ViewModel 提供一些依赖项。我遵循了 d.android.com this 指导的解决方案.
@HiltViewModel
public class ViewViewModel extends ViewModel {
...
@AssistedFactory
public interface ViewViewModelFactory {
ViewViewModel create(@Assisted int version);
}
@AssistedInject
public ViewViewModel(ProfileRepository repository, @Assisted int version) {
mProfileRepository = repository;
}
}
@AndroidEntryPoint
public class CarFragment extends Fragment {
@Inject
ViewViewModel.ViewViewModelFactory mViewViewModelFactory;
...
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
ViewViewModel viewModel = mViewViewModelFactory.create(21);
}
}
但是,仍然出现构建错误
ViewModel constructor should be annotated with @Inject instead of @AssistedInject.
我正在使用刀柄版本 2.38.1 和 AGP 版本 7.0.0。还尝试了一些早期版本(2.35、2.37)。
public class ViewViewModel extends ViewModel {
...
@AssistedFactory
public interface ViewViewModelFactory {
ViewViewModel create(@Assisted int version);
}
@AssistedInject
public ViewViewModel(ProfileRepository repository, @Assisted int version) {
mProfileRepository = repository;
}
public static ViewViewModel provideFactory(ViewViewModelFactory assistedFactory,
int version){
return new ViewViewModelFactoryProvider(assistedFactory,version).create(ViewViewModel.class);
}
public static class ViewViewModelFactoryProvider implements ViewModelProvider.Factory {
ViewViewModelFactory assistedFactory;
int version;
public ViewViewModelFactoryProvider(ViewViewModelFactory assistedFactory,
int version) {
this.assistedFactory = assistedFactory;
this.version = version;
}
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
return (T) assistedFactory.create(version);
}
}
}
@AndroidEntryPoint
public class CarFragment extends Fragment {
@Inject
ViewViewModel.ViewViewModelFactory mViewViewModelFactory;
...
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
ViewViewModel viewModel = ViewViewModel.provideFactory(mViewViewModelFactory,21);
}
}
最佳答案
删除 @HiltViewModel
在 link你提到,一个comment表示
In Dagger 2.31, it's possible to achieve the above without using @HiltViewModel and passing everything manually
@HiltViewModel
应该这样做。
关于java - ViewModel 构造函数应该用@Inject 注释而不是@AssistedInject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68649447/
我有一个如下所示的构造函数: @Inject public MyClass( @Named("config") String configFile, @Named("t
我刚刚开始学习Guice,但我已经遇到了一个问题。我有一个接口(interface) PlayerFactory 和一个实现 BlackjackPlayer PlayerFactory.java pu
关于 assisted injection 的页面解释了如何通过使用 @Assisted 注释构造函数中的一些参数来完成辅助注入(inject),但它没有解释 @AssistedInject 注释的用
我一直在一个项目中使用 guice。 我有一个抽象类,它有很多实现。为了使用正确的实现,我使用一个工厂来接收参数,然后返回正确的实例。 演示代码 @Singleton public class MyF
当我运行下面的代码时,我得到输出“Bar got 1234”。看起来 Guice 找不到 num2 的绑定(bind),并隐式分配了 num1 的值。这是 AssistedInject 功能的一部分吗
我已阅读 https://github.com/google/guice/wiki/AssistedInject ,但它没有说明如何传入 AssistedInject 参数的值。 injector.g
我想在运行时使用 Hilt 为 ViewModel 提供一些依赖项。我遵循了 d.android.com this 指导的解决方案. @HiltViewModel public class Vi
我想做这样的事情: @Inject private CollectorsListHolderFactory collectorsListHolderFactory; private Collector
我正在尝试使用 Guice 3.0 AssistedInject,它不会实例化工厂。 SSCCE代码: 父类 public class ParentClass() { @Inject privat
在我的 guice 模块中,我有多个工厂,如下所示: install(new FactoryModuleBuilder().implement(SportsCar.class,Ferrari.clas
我找不到如何进行“动态辅助注入(inject)”的方法。我的意思是我想根据参数向工厂提供它需要在运行时使用的实现类名。这是我目前拥有的: interface Letter {} abstract cl
我正在使用 Guice Assisted Inject图书馆为我 build 一个工厂。我目前的设置如下: class MyObject { @Inject public MyObject(@As
我最近开始使用 Guice,需要一些帮助。 我有一个带有构造函数的类,其中包含 3 种不同的要注入(inject)的参数。下面是类 @Inject public Bullet(EntityParams
我遇到一个奇怪的错误,在使用辅助注入(inject)时我无法克服: [DEBUG] [project] - Rebinding com.gwtplatform.mvp.client.DesktopGi
什么是 Spring Framework相当于FactoryModuleBuilder , @AssistedInject , 和 @Assisted在 Google Guice ?换句话说,使用 S
我是一名优秀的程序员,十分优秀!