Java 匕首2:场注入,其中也有注入场

Java 匕首2:场注入,其中也有注入场,java,dependency-injection,field,dagger-2,Java,Dependency Injection,Field,Dagger 2,我正在努力学习匕首2。 当我练习的时候,我有一个问题 我的问题是 简而言之,我想做场注入,它也有场注入。 如何制作或使用组件 我将在下面用我的代码解释我的问题。 下面的代码很好,但我想要更好的?或者漂亮的代码 Person.java您可以显式定义两个实例(公司和个人)之间的连接,并将所需的公司传递给个人构造函数中的个人。这里的方法是在PersonModule中定义这个依赖项,因为Dagger2可以在不同的模块中查找依赖项。这可能看起来像这样: @Module public class Perso

我正在努力学习匕首2。 当我练习的时候,我有一个问题

我的问题是 简而言之,我想做场注入,它也有场注入。 如何制作或使用组件

我将在下面用我的代码解释我的问题。 下面的代码很好,但我想要更好的?或者漂亮的代码


Person.java您可以显式定义两个实例(公司和个人)之间的连接,并将所需的公司传递给个人构造函数中的个人。这里的方法是在PersonModule中定义这个依赖项,因为Dagger2可以在不同的模块中查找依赖项。这可能看起来像这样:

@Module
public class PersonModule {
..
@Provides
public Person providePerson(Company company){
  return new Person(..,..,company);
}
..
}

这样,您只需要为TestPerson类的Person实例调用一次inject方法。

您可以显式定义两个实例(公司和个人)之间的连接,并将所需的公司传递给Person构造函数中的人员。这里的方法是在PersonModule中定义这个依赖项,因为Dagger2可以在不同的模块中查找依赖项。这可能看起来像这样:

@Module
public class PersonModule {
..
@Provides
public Person providePerson(Company company){
  return new Person(..,..,company);
}
..
}

这样,您只需要为TestPerson类的Person实例调用一次inject方法。

您的示例注入到底有什么困扰?我想要的是。。。我想删除TestPerson.java中的component.inject(person),如果我删除TestPerson.java中的component.inject(person),person.company中就会有空值。有什么好主意吗?当我在TestPerson.java向person注入值时,person的注入字段(公司)会自动注入?您的示例注入到底是什么困扰您?我想要的是。。。我想删除TestPerson.java中的component.inject(person),如果我删除TestPerson.java中的component.inject(person),person.company中就会有空值。有什么好主意吗?当我在TestPerson.java向person注入值时,person的注入字段(公司)会自动注入?谢谢您的回答。我有个问题。你的意思是我应该通过个人的构造函数传递公司对象。在这种情况下,公司如何亲自注入字段,而不在构造函数中赋值?公司将不会由注释注入,而是由其构造函数注入。当然,您需要在构造函数中分配它。带有注释的依赖项注入的范围仅限于类,它是在组件方法中定义的。嵌套注入注释根本不在dagger的当前范围内,因为这会带来很多复杂问题。现在,您应该通过对象构造函数来完成。谢谢您的回答。我有个问题。你的意思是我应该通过个人的构造函数传递公司对象。在这种情况下,公司如何亲自注入字段,而不在构造函数中赋值?公司将不会由注释注入,而是由其构造函数注入。当然,您需要在构造函数中分配它。带有注释的依赖项注入的范围仅限于类,它是在组件方法中定义的。嵌套注入注释根本不在dagger的当前范围内,因为这会带来很多复杂问题。现在,您应该通过objects构造函数来实现。
@Component(modules={CompanyModule.class, PersonModule.class})
public interface TestPersonComponent {

void inject(TestPerson test);
void inject(Person person);

}
@Module
public class PersonModule {
..
@Provides
public Person providePerson(Company company){
  return new Person(..,..,company);
}
..
}