在Hilt中,如果你需要创建具有相同实现的同一类型的多个实例,你可以使用@Qualifier
注解来区分它们。下面是一个简单的例子,展示了如何在Hilt中创建和使用具有相同实现的同一类型的多个实例。
首先,定义一个接口和两个实现类:
public interface MyInterface {
void doSomething();
}
public class MyImplementation1 implements MyInterface {
@Override
public void doSomething() {
System.out.println("Implementation 1");
}
}
public class MyImplementation2 implements MyInterface {
@Override
public void doSomething() {
System.out.println("Implementation 2");
}
}
接下来,创建两个自定义的限定符注解:
import javax.inject.Qualifier;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface Implementation1 {}
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface Implementation2 {}
然后,在模块中使用@Binds
和自定义限定符注解来提供依赖:
import dagger.Binds;
import dagger.Module;
import dagger.hilt.InstallIn;
import dagger.hilt.android.components.ApplicationComponent;
@Module
@InstallIn(ApplicationComponent.class)
public abstract class AppModule {
@Binds
@Implementation1
abstract MyInterface provideMyImplementation1(MyImplementation1 myImplementation1);
@Binds
@Implementation2
abstract MyInterface provideMyImplementation2(MyImplementation2 myImplementation2);
}
最后,在需要使用这些实例的地方,使用相应的限定符注解进行注入:
import javax.inject.Inject;
public class MainActivity extends AppCompatActivity {
@Inject
@Implementation1
MyInterface myImplementation1;
@Inject
@Implementation2
MyInterface myImplementation2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myImplementation1.doSomething();
myImplementation2.doSomething();
}
}
领取专属 10元无门槛券
手把手带您无忧上云