2009-12-02 118 views
0

我有一个应用程序的配置文件,它看起来像这样绑定不同的数据库提供商}。 我想配置绑定,这样(基于hibernate的)应用程序根据使用哪个值加载SessionFactory的特殊提供程序,即PostgresqlSessionFactoryProvider。吉斯,基于YAML配置

问题是,Guice还负责将Config.class的一个实例注入需要访问它的类。现在我需要访问配置,同时设置绑定......这是一个鸡蛋问题。

我该如何解决这个问题?

回答

1

我找到了一种方法来做到这一点。这可能不是最好的办法,所以如果你知道的更好,我仍然会看到答案。

问题是,活页夹首先必须完全配置,因此它可以提供一个Config.class实例。

于是我想出了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 2009-12-08 08:42:08