在Dagger
我有时会看到有些组件只是扩展了界面,而其他组件则使用dependencies
。
例如,我们有一个基本组件:
@Singleton
@Component(modules={...})
public interface BaseComponent {
...
}
版本1:
@Singleton
@Component(modules={...})
public interface MyComponent extends BaseComponent {
...
}
版本2:
@CustomScope
@Component(modules={...}, dependencies= BaseComponent.class)
public interface MyComponent {
...
}
它们是否用于不同的场景?
答案 0 :(得分:2)
不应使用接口扩展创建组件层次结构。说ComponentA
有一些注射部位:
@Component
interface ComponentA {
void inject(ActivityA1 activityA1);
void inject(ActivityA2 activityA2);
}
你写了ComponentB
ComponentA
:
@Component
interface ComponentB extends ComponentA {
void inject(ActivityB activityB);
}
由于ComponentB
会使ComponentA
中的方法失败,ActivityA1
和ActivityA2
的成员注入器将在ComponentB
中生成。
如果要创建组件层次结构,标准方法是使用subcomponents或使用dependent components。
异常:您可以使用接口扩展来制作测试组件。这是比扩展模块更好的解决方案。有关官方文档的解释,请参阅here:
@Component(modules = {
OAuthModule.class, // real auth
FooServiceModule.class, // real backend
OtherApplicationModule.class,
/* … */ })
interface ProductionComponent {
Server server();
}
@Component(modules = {
FakeAuthModule.class, // fake auth
FakeFooServiceModule.class, // fake backend
OtherApplicationModule.class,
/* … */})
interface TestComponent extends ProductionComponent {
FakeAuthManager fakeAuthManager();
FakeFooService fakeFooService();
}