2010-12-28 14 views
1

2つのクラスがあるとします(MainMainDependency)。 2番目のクラスはMainによってのみ使用され、IoCを使用する目的はMainクラスのインスタンスを構築することです。Guiceでプロパティを設定する正しい方法は何ですか?

MainDependencyクラスには整数型のフィールドがあります。このフィールドは設定する必要はありません(または、何も指定されていなければ、デフォルト値を持つと仮定します)。

問題:整数フィールドを設定する最も正しい方法は何ですか?私が見る1つの方法は、私のModuleの中に同様のフィールドを作成し、その値をconfigureモジュール内で使用することです。しかし、私はそれが間違った方法だと感じています。

あなたの経験を共有してください。あらかじめThx。

答えて

2

私はあなたが主に2つのオプションがあると思う:

1)一定のバインディングを使用してそれを注入します。インスタンス化時にMY_CONSTANTという値をModuleに渡すことができます。システムプロパティから取得することも、他の方法で取得することもできます。

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のインスタンスを返します。ファクトリを作成するために補助注入を使用します。

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); 

注補助注入して、あなたが実装する必要はありませんMainDependencyFactory。 Guiceはあなたのためにそれを作成します。

関連する問題