두 개의 서로 다른 생성자가 있는 경우 Guice를 사용하여 주입하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1840643

  •  12-09-2019
  •  | 
  •  

문제

여기 Total Guice 멍청한 놈은 몇 가지 기사를 읽고 소개 비디오를 보았습니다. 그게 전부입니다.

다음은 "guicifiy"하려는 단순화된 이전 코드입니다.(내가 이해하는 한) 어떻게 해야 할지 잘 모르겠습니다. @inject-두 생성자 중 하나에 주석을 달까요?호출 클래스가 하나 또는 다른 인스턴스를 어떻게 생성할 수 있습니까?아니면 어떻게든 이것을 리팩터링해야 합니까?

public class MyDialog extends JDialog {
    public MyDialog( JFrame parent, <other parameters...> ) {
        super( parent );
    }

    public MyDialog( JDialog parent, <other parameters...>) {
        super( parent );
    }
 }
도움이 되었습니까?

해결책

하나의 ctor에만 주입할 수 있습니다.

이 클래스가 어떻게 사용되는지에 따라 다음을 수행할 수 있습니다.

  • 두 가지 "새로운" 메소드를 사용하여 클라이언트 코드에 팩토리를 삽입합니다.
  • 모든 인수를 하나의 ctor로 롤링하고 필요하지 않은 경우 null을 전달합니다.

호출 클래스가 하나 또는 다른 인스턴스를 어떻게 생성할 수 있습니까?

이는 호출 클래스가 MyDialog의 여러 인스턴스를 원한다는 것을 의미합니다.그런 다음 수동 압연 공장을 사용해야 합니다(액터가 하나만 있는 경우 보조 주입이 이를 처리할 수 있습니다).나는 당신이 무엇을 하고 있는지에 대한 세부 사항을 모르고 이미 알고 있는 내용을 반복할 것 같지만 공백으로 설명하기 위해 MyDialog에서 인터페이스를 추출하고 공장에서 이를 반환하도록 제안합니다.이렇게 하면 테스트에서 MyDialog를 가짜로 만들 수 있습니다.

다른 팁

생성자 주입은 매우 깨끗합니다. MLK는 옳습니다. 하나의 생성자에만 주입 할 수 있다고 말합니다.

당신이 할 수있는 것은 방법 주입을 사용하는 것입니다.

public class Smt {

    private int a;
    private Cereal cereal;
    private Personality personality;
    private ignition;

    public Smt() {
        this.a = 5;
    }

    public Smt(int a) {
        this.a = a;
    }

    @Inject
    public void setup(@CiniMini Cereal cereal, @Rastafarian Personality personality,
        Ignition ignition) {
        this.cereal = cereal;
        this.personality = personality;
        this.ignition = ignition;
    }
}

Guice가 할 일은 수업에 전화하는 것입니다. ' setup 클래스 방법 및 모든 주사를 제공합니다. 그런 다음 생성자와 똑같은 일을합니다. 객체를 클래스 속성에 할당하십시오.

이전 의견에 동의합니다. 추가 힌트 : 생성자 주입은 클래스가 필요로하는 모든 종속성을 제공해야합니다. MLK가 말했듯이, 한 가지 접근 방식은 생성자에 대부분의 인수로 주석을 달고 다른 하나를 리팩터링하여 다른 하나는 필요에 따라 널 값을 전달하여 전자를 호출하도록 리팩터링하는 것입니다.
또한 Guice 3.0은 소위를 지원합니다 생성자 바인딩 프로그래머가 사용할 생성자를 지정할 수 있습니다. 보다 여기 자세한 사항은.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top