나는 이것을하는 방법을 발견했다. 그것을하는 것이 최선의 방법은 아닐 수도 있습니다. 그래서 당신이 더 잘 알고 있다면, 나는 여전히 답을 볼 것입니다.
요점은 바인더가 먼저 완전히 구성되어야하므로 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();
}
}
}
어떻게 생각하십니까? 이 작업을 수행하는 좋은 방법입니까?
음. 아무도 모른다면 아무도 걱정할 필요가 없습니다. 제 대답을 받아 들여야합니다 ... – kungfoo