2011-09-16 3 views
0

Google GuiceのベストプラクティスはInject Only Direct Dependenciesです。 次のサンプルコードを使用すると、クラスの顧客インスタンスにアカウントのインスタンスを作成するにはどうすればよいですか?Google Guiceの循環参照を防ぐ方法は、直接依存のみを注入する場合

@Provides 
Account providePurchasingAccount(Customer customer) { 
    return customer.getPurchasingAccount(); 
} 

問題はGuiceのは常に循環参照になりprovidePurchasingAccount()を呼び出して新しいアカウントを取得しようということ、です。

+0

循環参照がない場合は、参照が表示されます。アカウントを提供するには、顧客が必要です。しかし、アカウントを必要とする顧客を提供するために、どこにそれが見られますか。 – dlamblin

答えて

2

抜粋したメソッドは、CustomerではなくCustomersModuleクラスにあります。

ここに詳細があります。

これは、お客様の拘束方法によって異なります。

Guiceのwikiページには、お客様のための綴りは示されていません。

このモジュールにもこの方法があるとします。その場合

@Provides 
Customer getCustomer(Database database, long customerId) { 
    return database.getCustomer(customerId); 
} 

アカウントを最初に注入されたときに、この方法は、その後providePurchasingAccountがアカウントを取得するために呼び出されるCustomerオブジェクトを取得するために呼び出されます。