Android 有没有办法使用Dagger2将对象注入接口

Android 有没有办法使用Dagger2将对象注入接口,android,dependency-injection,dagger-2,dagger,default-method,Android,Dependency Injection,Dagger 2,Dagger,Default Method,在我的活动类中,我可以使用以下方法注入ViewModel: @Inject GameViewModel gameViewModel; 而且效果很好。问题是,我想在接口中使用对象: public interface SharedData { @Inject GameViewModel gameViewModel; default void createNewUser(User authenticatedUser) { gameViewModel.user

在我的活动类中,我可以使用以下方法注入ViewModel:

@Inject
GameViewModel gameViewModel;
而且效果很好。问题是,我想在接口中使用对象:

public interface SharedData {
    @Inject
    GameViewModel gameViewModel;

    default void createNewUser(User authenticatedUser) {
        gameViewModel.userLiveData.observe(this, user -> {
            Log.d("TAG", user.name);
        });
    }
}
这可能吗?因为我得到:

变量gameViewModel可能尚未初始化


Dagger不应该这样做吗?

您不能在接口中使用字段。要使用字段,您应该使用类或抽象类。

我认为如果您在活动中
@Inject
视图模型,那么每次重新创建活动时,您都会得到一个新实例,例如,当手机旋转和配置发生更改时。这违背了viewmodel的目的,而viewmodel本应在配置更改后继续存在。您要做的是注入viewmodel工厂,并使用viewmodelprovider和注入的工厂获取viewmodel。至于在界面中注入viewmodel,这听起来像是一个坏主意abstraction@sonnet好的,谢谢你,十四行诗。