2014-08-28 48 views
1

所以我有一個問題,似乎沒有好的模式來做這樣的事情。Dagger/Google Auto Factory:處理懶惰和提供的字段

public class Person { 

    @Lazy<Foo> protected mLazyFoo; 

} 

@AutoFactory(
    className = "ManFactory" 
) 
public class Man extends Person { 

    Private Hammer mHammer; 

    Man(@Provided Hammer hammer) { 
     mHammer = hammer; 
    } 

} 

// mLazyFoo is null!!!!! 
Man man = ManFactory.create(); 

我該如何處理這種情況?看起來現在混合AutoFactory和不依賴於自動化的東西是不可能的,或者你必須做一些事情來總是提供一個構造函數來確保像父類中的所有惰性組件一樣,例如,可以像這個例子那樣手動構建。

public class Person { 

     protected Foo mLazyFoo; 

     protected Person(Foo foo) { 
      mLazyFoo = foo; 
     } 

    } 

    @AutoFactory(
     className = "ManFactory" 
    ) 
    public class Man extends Person { 

     Private Hammer mHammer; 

     Man(@Provided Hammer hammer, @Provided Foo foo) { 
      mHammer = hammer; 
      super(foo); 
     } 

    } 

它仍然會改變代碼的性質。它幾乎看起來像使用Lazy和Provider是100%反對使用AutoFactory。

回答

0

我找到了適合我的解決方案。在你的模塊,你要加:

@Module() 
public class CoreModule { 
    @Provides @Singleton Lazy<Foo> provideLazyFoo(Lazy<Foo> foo) { 
    return foo; 
    } 
} 

有了這把匕首會發現Lazy<Foo>,當你要求它,它也裝載Foo實例懶惰。