我工作的一個對象層次結構是這樣的:匕首2子類具有比父類更具體的依賴
class Foo extends View
{
@Inject BaseDependency dep;
Foo() // Default android view constructors
{
injectDependencies();
}
protected void injectDependencies()
{
getApp().getFooComponent().inject(this);
}
}
class ExtraBaseDependency extends BaseDependency
{
@Inject
ExtraBaseDependency() {}
}
class Bar extends Foo
{
@Inject ExtraBaseDependency dep;
@Override
protected void injectDependencies()
{
getApp().getBarComponent().inject(this);
}
}
我試圖解決的問題是,我想在我的更具體的「 Bar'使用更多方法子類化'ExtraBaseDependency',並且我還想爲Foo提供與從Bar中使用的整個層次結構中收集數據相同的對象。
我認爲,通過重寫injectDependencies()而不是調用super,我可以提供我的子類和它的父類他們需要的依賴關係,但只有其中的一個可以共享,但Bar會得到更具體的接口因此它可以完成它的工作。
我看到的行爲是,雖然它編譯和運行,我看到ExtraBaseDependency被構造兩次。
我的FooComponent和BarComponents具有不同的作用域和不同的模塊,它們都是獨立的。我不確定爲什麼我沒有在子類中獲得基類中的相同實例。
我很欣賞的評論。我沒有嘗試過抽象類,但我覺得這應該可以工作。 我不能保持它的方式,因爲依賴是一個'中介'類型的對象,並且需要對類及其所有超類都一樣。 依賴項的作用域是自定義作用域。 如果我從基類中刪除@Inject,它將如何獲得它的依賴關係? 我還沒有試過讓這個類成爲一個基類,但這可能工作。我需要進一步研究。你會爲BaseDependency獲得一個抽象的getter嗎? – Stampede10343
通過MembersInjectors挖掘,看起來Dagger選擇使用兩個不同的提供者來注入Foo和Bar。看起來抽象類可能是唯一的出路。 – Stampede10343