2009-12-02 152 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