java - 安卓|| 在 Hilt 不支持的类中注入依赖项,例如 Helper 类
问题描述
我在我的应用程序中使用了 Hilt,我成功地在 Activity 类中注入了依赖项并获得了所需的结果,但无法在其他类中注入依赖项,例如辅助类。
请检查我在MainActivity类下面尝试过的以下代码
package com.inn.hiltdemo;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.inn.hiltdemo.hilt.MyFirstHelperClass;
import javax.inject.Inject;
import javax.inject.Named;
import dagger.hilt.android.AndroidEntryPoint;
@AndroidEntryPoint
public class MainActivity extends AppCompatActivity {
@Inject
@Named("MyHelperClass")
MyFirstHelperClass myFirstHelperClass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
////IT IS RUNNING SUCCESSFULLY
System.out.println("HERE IS THE HELPER CLASS DATA==>>>> "+ myFirstHelperClass.getStringData());
MySecondHelperClass mySecondHelperClass = new MySecondHelperClass();
mySecondHelperClass.getSecondaryDataFromHelper(this);
}
}
我的MyModule课程
package com.inn.hiltdemo.hilt
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Named
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
class MyModule {
@Singleton
@Provides
@Named("MyHelperClass")
fun provideMyHelperClass(): MyFirstHelperClass {
return MyFirstHelperClass()
}
}
请检查MyFirstHelperClass类
package com.inn.hiltdemo.hilt;
public class MyFirstHelperClass {
public String getStringData() {
return "My Data";
}
}
这是我的MySecondHelperClass.java,我试图在其中获取Hilt依赖注入,请检查以下代码。
package com.inn.hiltdemo;
import android.content.Context;
import com.inn.hiltdemo.hilt.MyFirstHelperClass;
import javax.inject.Singleton;
import dagger.hilt.EntryPoint;
import dagger.hilt.InstallIn;
import dagger.hilt.android.EntryPointAccessors;
import dagger.hilt.components.SingletonComponent;
@Singleton
public class MySecondHelperClass {
@EntryPoint
@InstallIn(SingletonComponent.class)
interface DeviceDiagnosticHelperEntryPoint {
public MyFirstHelperClass provideMyFirstHelperClass();
}
public void getSecondaryDataFromHelper(Context mContext) {
Context appContext = mContext.getApplicationContext();
DeviceDiagnosticHelperEntryPoint hiltEntryPoint =
EntryPointAccessors.fromApplication(appContext,
DeviceDiagnosticHelperEntryPoint.class);
MyFirstHelperClass myFirstHelperClass =
hiltEntryPoint.provideMyFirstHelperClass();
System.out.println("HERE WE CAN USE==>>>> " + myFirstHelperClass.getStringData());
}
}
从MySecondHelperClass.java,我想在我的上面的类中进行依赖注入但是得到如下异常
[Dagger/MissingBinding] com.inn.hiltdemo.hilt.MyFirstHelperClass 不能在没有 @Inject 构造函数或 @Provides-annotated 方法的情况下提供。在 com.inn.hiltdemo.MySecondHelperClass.DeviceDiagnosticHelperEntryPoint.provideMyFirstHelperClass() 请求 com.inn.hiltdemo.hilt.MyFirstHelperClass
解决方案
您在第二个 Helper 中错过了 @Named 注释:
public class MySecondHelperClass {
@EntryPoint
@InstallIn(SingletonComponent.class)
interface DeviceDiagnosticHelperEntryPoint {
@Named("MyHelperClass")
MyFirstHelperClass provideMyFirstHelperClass();
}
public void getSecondaryDataFromHelper(Context mContext) {
Context appContext = mContext.getApplicationContext();
DeviceDiagnosticHelperEntryPoint hiltEntryPoint =
EntryPointAccessors.fromApplication(appContext,
DeviceDiagnosticHelperEntryPoint.class);
MyFirstHelperClass myFirstHelperClass =
hiltEntryPoint.provideMyFirstHelperClass();
System.out.println("HERE WE CAN USE==>>>> " +
myFirstHelperClass.getStringData());
}
}
第二种选择是MyFirstHelperClass
用注入注释的构造函数并完全删除 Module 类(如果MyFirstHelperClass
是你的)