Android ||在 Hilt 不支持的 classes 中注入依赖项,例如 Helper class
Android || Inject dependencies in classes not supported by Hilt like Helper class
我在我的应用程序中使用了 Hilt,我在 Activity class 中成功注入了依赖项并获得了期望的结果,但无法在其他 [=44] 中注入依赖项=]就像助手 class.
请检查我在 MainActivity class
下面尝试过的代码
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);
}
}
我的 我的模块 class
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 class
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 开始,我想在上面进行依赖注入 class 但是得到如下异常
[Dagger/MissingBinding] com.inn.hiltdemo.hilt.MyFirstHelperClass cannot be provided without an @Inject constructor or an @Provides-annotated method.
com.inn.hiltdemo.hilt.MyFirstHelperClass is requested at
com.inn.hiltdemo.MySecondHelperClass.DeviceDiagnosticHelperEntryPoint.provideMyFirstHelperClass()
您在第二个 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
的构造函数并完全删除模块 class(如果 MyFirstHelperClass
是你的)
我在我的应用程序中使用了 Hilt,我在 Activity class 中成功注入了依赖项并获得了期望的结果,但无法在其他 [=44] 中注入依赖项=]就像助手 class.
请检查我在 MainActivity class
下面尝试过的代码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);
}
}
我的 我的模块 class
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 class
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 开始,我想在上面进行依赖注入 class 但是得到如下异常
[Dagger/MissingBinding] com.inn.hiltdemo.hilt.MyFirstHelperClass cannot be provided without an @Inject constructor or an @Provides-annotated method. com.inn.hiltdemo.hilt.MyFirstHelperClass is requested at com.inn.hiltdemo.MySecondHelperClass.DeviceDiagnosticHelperEntryPoint.provideMyFirstHelperClass()
您在第二个 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
的构造函数并完全删除模块 class(如果 MyFirstHelperClass
是你的)