所以我有一个小问题,现在似乎没有一个好的模式来做这样的事情。
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);
}
}尽管如此,它还是会改变代码的性质。它几乎看起来像是使用惰性和提供者是100%反对使用AutoFactory。
发布于 2015-03-22 02:01:02
我找到了一个适合我的解决方案。在您的模块中,您必须添加:
@Module()
public class CoreModule {
@Provides @Singleton Lazy<Foo> provideLazyFoo(Lazy<Foo> foo) {
return foo;
}
}有了这个Dagger,它将找到Lazy<Foo>,并且还会在您请求Foo实例时加载它。
https://stackoverflow.com/questions/25539899
复制相似问题