2009-12-02 3 views
0

YAML의 설정에 따라 서로 다른 데이터베이스 공급자를 결합 }. 바인딩을 구성하여 (최대 절전 모드를 기반으로) 앱에서 사용되는 값 (예 : PostgresqlSessionFactoryProvider)에 따라 SessionFactory의 특수 제공자를로드합니다.Guice, 나는 이런 식으로 뭔가를 보이는 응용 프로그램의 설정 파일이

문제는 Guice가 Config.class의 인스턴스를 액세스해야하는 클래스에 주입하는 것입니다. 이제 바인딩을 설정하는 동안 config에 액세스해야합니다 ... 일종의 닭고기 달걀 문제입니다.

어떻게 해결할 수 있습니까?

답변

1

나는 이것을하는 방법을 발견했다. 그것을하는 것이 최선의 방법은 아닐 수도 있습니다. 그래서 당신이 더 잘 알고 있다면, 나는 여전히 답을 볼 것입니다.

요점은 바인더가 먼저 완전히 구성되어야하므로 Config.class의 인스턴스를 제공 할 수 있다는 것입니다.

그래서 나는 따라 다른 구현을 제공하는 모든 정보는 guice에 의해 slurped되었을 때, 그것은 수단을 가질 수 있도록하는 설정 guice 인젝터 자체를 필요로 SessionFactory.class에 대한 사용자 정의 제공자를 내놓았다 구성에.

public class SessionFactoryProvider implements Provider<SessionFactory> { 

    private Config config; 
    private Injector injector; 

    @Inject 
    public SessionFactoryProvider(Config config, Injector injector) { 
     this.config = config; 
     this.injector = injector; 
    } 

    @Override 
    public SessionFactory get() { 
     switch (config.database.type) { 
     case postgresql: 
      return injector.getInstance(PostgresqlSessionFactoryProvider.class).get(); 
     case mysql: 
      return injector.getInstance(MysqlSessionFactoryProvider.class).get(); 
     case file: 
      return injector.getInstance(FileBasedSessionFactoryProvider.class).get(); 
      /* some more providers... */ 
     default: 
      return injector.getInstance(FileBasedSessionFactoryProvider.class).get(); 
     } 
    } 
} 

어떻게 생각하십니까? 이 작업을 수행하는 좋은 방법입니까?

+0

음. 아무도 모른다면 아무도 걱정할 필요가 없습니다. 제 대답을 받아 들여야합니다 ... – kungfoo

관련 문제