Dagger2を学ぼうとしています。 私が練習している間、私は質問がありました。Dagger2:注射場もあるフィールド注射
私の質問は 要するに、フィールドインジェクションにもフィールドインジェクションが必要です。 コンポーネントの作成または使用方法は?
私のコードで私の質問を以下に説明します。 以下のコードは正常に動作しますが、私はより良くしたいですか?美しいコード。
Person.java < - このクラスにはフィールド注入があります。
public class Person {
public String name;
public int age;
@Inject
public Company involvedCompany; // Look here!! has field Injection.
public Person(String name, int age){
this.name = name;
this.age = age;
}
@Override
public String toString(){
return "[User] name : " + name + ", age : " + age + ", Company : " + involvedCompany.toString();
}
}
TestPerson.java
public class TestPerson {
@Inject
Person person; //I want to do field injection to this field.
//this filed also contains field injection in it.
//(See previos code Person.java)
TestPersonComponent component;
private TestPerson(){
component = DaggerTestPersonComponent.builder()
.companyModule(new CompanyModule("Tmax", "Korea"))
.personModule(new PersonModule("Ui-Gyun", 28))
.build();
/****************************************************
HERE!!! I am wondering How to change under code!!
*****************************************************/
component.inject(this); // for this class.
component.inject(person); // for person's inside field.
}
public void call(){
System.out.println(person.toString());
}
public static void main(String[] args){
TestPerson test = new TestPerson();
test.call();
}
}
TestPersonComponent.java
@Component(modules={CompanyModule.class, PersonModule.class})
public interface TestPersonComponent {
void inject(TestPerson test);
void inject(Person person);
}
私はCompany.java CompanyModule.java、PersonModule.javaを省略します。
これは簡単な例です。 しかし、大きなプロジェクトでは、非常に複雑で多くの注射があります。
その場合、Component.javaを作成して、上のコードのようにinject()メソッドを呼び出すと、実際には気にせず、コードを書くのが難しいです。 美しいコードを作成する良い方法はありますか?
正確にサンプルを注入するのはどうですか? – Jacob
私がしたいことは... TestPerson.javaにあるcomponent.inject(人物)を消去したい –
TestPerson.javaでcomponent.inject(person)を消去すると、person.companyにnull値があります。 良いアイデアはありますか? TestPerson.javaの人に価値を注入すると、人の注入フィールド(会社)が自動的に注入されますか? –