2010-12-28 3 views
1

우리는 2 개의 클래스 - MainMainDependency이 있다고 가정합니다. 두 번째 클래스는 Main에 의해서만 사용되며 IoC를 사용하는 목적은 Main 클래스의 인스턴스를 생성하는 것입니다.Guice로 속성을 설정하는 올바른 방법은 무엇입니까?

MainDependency 클래스에는 정수 유형의 필드가 있습니다. 이 필드는 설정할 필요가 없습니다 (또는 다른 것이 지정되지 않은 경우 기본값이 있어야한다고 가정합니다).

문제 : 정수 필드를 설정하는 가장 올바른 방법은 무엇입니까? 내가 보는 한 가지 방법은 내 Module 안에 비슷한 필드를 만들고 그 값을 configure 모듈 안에 사용하는 것입니다. 그러나 나는 그것이 잘못된 길이라고 느낍니다.

, 당신의 경험을 공유하십시오. 미리 Thx.

답변

2

난 당신이 주로 두 가지 옵션이 생각 :

1) 일정 바인딩을 사용하여 주입한다. MY_CONSTANT의 값은 인스턴스 생성시 Module으로 전달 될 수 있습니다. 시스템 속성에서 가져 오거나 다른 방법으로 가져올 수 있습니다. 지원 분사로 구현할 필요가 없습니다

interface MainDependencyFactory{ 
    MainDependency create(int myConst); 
} 

class MainDependency{ 
    @Inject 
    public MainDependency(@Assisted int myConst){ 
    //.. 
    } 
} 

class Module extends AbstractModule{ 
    public void configure(){ 
    bind(MainDependencyFactory.class).toProvider(
     FactoryProvider.newFactory(MainDependencyFactory.class, MainDependency.class)); 
    } 
} 

//to use the above, instantiate your factory (or inject it somewhere) 
MainDependencyFactory f = injector.getInstance(MainDependencyFactory.class); 
//Then you can create MainDependency with any value 
MainDependency md = f.create(MY_CONSTANT); 

참고 :

class MainDependency{ 
    @Inject 
    public MainDependency(@Named("myConst") int myConst){ 
    //... 
    } 
} 

class Module extends AbstractModule{ 
    public void configure(){ 
    bindConstant().annotatedWith(Names.named("myConst").to(MY_CONSTANT); 
    } 
} 

2) 매개 변수로 값을하고 MainDependency의 인스턴스를 반환하는 공장을 만드는 데 도움이 분사를 사용하여 MainDependencyFactory. Guice가 당신을 위해 그것을 만들 것입니다.

관련 문제