Dagger / Google Auto Factory:处理混合Lazy和提供的字段

时间:2014-08-28 02:41:41

标签: android dagger

所以我有点问题,现在似乎没有好的模式来做这样的事情。

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和不依赖于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。

1 个答案:

答案 0 :(得分:0)

我找到了一个适合我的解决方案。在您的模块中,您必须添加:

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

使用此Dagger会找到Lazy<Foo>并在您请求时加载Foo实例。