鉴于下面的例子:是否可以避免父类中的不必要注入?
class CustomView extends View {
@Inject
SomeObject mObject;
@Override
protected void onFinishInflate() {
super.onFinishInflate();
getApplicationComponent().inject(this);
}
}
class SecondaryCustomView extends CustomView {
@Inject
AnotherObject mAnotherObject;
@Override
protected void onFinishInflate() {
super.onFinishInflate();
getApplicationComponent().inject(this);
}
}
两个自定义视图可以在布局被独立地使用。第二个只比第一个更专业。如你所见,两个都有注入的字段,都需要调用inject()。问题是,当SecondaryCustomView调用其inject()时,Dagger注入AnotherObject的实例和SomeObject的实例。在调用super.onFinishInflate()之后,它创建了SomeObject的第二个实例。这本身不是问题,但我们至少会创造不必要的对象。
有没有办法避免这种情况?有一种方式告诉Dagger注入了一个子类,那么忽略父注入?
举例来说,组件看起来是这样的:
@Component(...)
public interface AppComponent {
void inject(CustomView);
void inject(SecondaryCustomView);
}
你还可以发布你的组件的接口吗? – azizbekian
这只是一个例子。如果您想知道注入对象的范围,请考虑为每次注入创建一个新实例。 – fhsilva
我感兴趣接口方法签名中'this'的类型是什么。 – azizbekian