首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构造器注入匕首2

构造器注入匕首2
EN

Stack Overflow用户
提问于 2016-03-19 23:09:38
回答 1查看 325关注 0票数 1

我不能通过构造函数注入依赖项,而且我肯定我做错了什么。我有以下几点:

代码语言:javascript
复制
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来解决这个问题吗?我错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-20 07:52:24

为了做到这一点,你必须做两件事:

  1. 使用inject方法声明组件
代码语言:javascript
复制
@Component
public interface AeropressComponent {
    void inject(LoginActivity aeropress);
}
  1. 在活动中构建匕首组件并注入它
代码语言:javascript
复制
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在引用和创建的实例之间直接赋值,在我的示例中它执行以下操作

代码语言:javascript
复制
LoginActivity.aeropress = Factory.createAeropress();

因此,如果不使用inject方法创建组件,它就不知道将用Factory.createAeropress();创建的实例放在哪里,如果有人能给我一个更好的解决方案,我将给出答案

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36108341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档