如何覆盖Dagger 2不同范围内的依赖关系?例如:如何覆盖Dagger中范围内的依赖关系2
我在我的应用程序中有两个组件:ApplicationComponent
和ActivityComponent
。 ApplicationComponent
是基本组件,ActivityComponent
是我想要执行覆盖的作用域组件。
在这个例子中,我创建的模型:
public class Parrot {
private final HelloPrinter helloPrinter;
public Parrot(HelloPrinter helloPrinter) {
this.helloPrinter = helloPrinter;
}
public void sayHello(){
helloPrinter.print();
}
}
public interface HelloPrinter {
void print();
}
public class AppHelloPrinter implements HelloPrinter{
@Override
public void print() {
System.out.println("Hello Application");
}
}
public class ActivityHelloPrinter implements HelloPrinter {
@Override
public void print() {
System.out.println("Hello Activity");
}
}
,代码:
ApplicationComponent applicationComponent = DaggerApplicationComponent.builder().build();
applicationComponent.provideParrot().sayHello();
activityComponent = DaggerActivityComponent.builder()
.applicationComponent(applicationComponent).build();
activityComponent.provideParrot().sayHello();
我所需的输出是:
Hello Application
Hello Activity
所以,我提出的模块:
ApplicationModule:
@Singleton
@Component(modules = ApplicationModule.class)
public interface ApplicationComponent {
Parrot provideParrot();
}
@Module
public class ApplicationModule {
@Provides
@Singleton
HelloPrinter providePrinter(){
return new AppHelloPrinter();
}
@Provides
Parrot provideParrot(HelloPrinter helloPrinter) {
return new Parrot(helloPrinter);
}
}
ActivityModule:试图重写HelloPrinter
@PerActivity
@Component(dependencies = ApplicationComponent.class, modules = ActivityModule.class)
public interface ActivityComponent {
Parrot provideParrot();
}
@Module
@PerActivity
public class ActivityModule {
@Provides
@PerActivity
HelloPrinter provideHelloPrinter() {
return new ActivityHelloPrinter();
}
}
但有了这个配置的输出是:
Hello Application
Hello Application
什么我做错了吗?谢谢
我认为在Dagger2中不可能覆盖模块。如果它适合你,你可以尝试将它们标记为@Named(“Activity”)和@Named(“Application”) –