我不能通过构造函数注入依赖项,而且我肯定我做错了什么。我有以下几点:
public class Water {
@Inject
public Water() {}
@Override
public String toString() { return "Water + ";}
}
public class Heater {
@Inject
public Heater() {}
@Override
public String toString() {return " heater";}
}
public class Aeropress {
Water mWater;
Heater mHeater;
@Inject
public Aeropress(Water water, Heater heater) {
mWater = water;
mHeater = heater;
}
@Override
public String toString() {
return mWater.toString() + mHeater.toString();
}
}
public class LoginActivity extends AppCompatActivity{
@Inject Aeropress aeropress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e("* 69 * LoginActivity *", "onCreate " + aeropress);
}活动中的代码输出null,这样匕首就不会注入任何东西。知道如何不用@provide来解决这个问题吗?我错过了什么?
发布于 2016-03-20 07:52:24
为了做到这一点,你必须做两件事:
@Component
public interface AeropressComponent {
void inject(LoginActivity aeropress);
}public class LoginActivity extends AppCompatActivity{
@Inject Aeropress aeropress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DaggerAeropressComponent.builder().build().inject(this);
/*DaggerAeropressComponent.create().inject(this);*/ //or this
Log.e("* 69 * LoginActivity *", "onCreate " + aeropress);
}经过这些修改后,它工作起来就像一个魅力,甚至没有创建一个@Module类。我理解这一点的逻辑以及需要组件的原因是,为了让匕首向aeropress注入一个新的实例,它需要容器(活动),其中可以找到aeropress的引用。此外,我现在还记得@Inject字段不能私有的原因是dagger在引用和创建的实例之间直接赋值,在我的示例中它执行以下操作
LoginActivity.aeropress = Factory.createAeropress();因此,如果不使用inject方法创建组件,它就不知道将用Factory.createAeropress();创建的实例放在哪里,如果有人能给我一个更好的解决方案,我将给出答案
https://stackoverflow.com/questions/36108341
复制相似问题