Как запретить циклические ссылки в Google Guice, если вы вводите только прямые зависимости - PullRequest
0 голосов
/ 16 сентября 2011

В Google Guice рекомендуется использовать Вставлять только прямые зависимости . Но если я использую следующий пример кода, как я могу создать экземпляр учетной записи в классе Customer ?

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

Проблема в том, что Guice всегда пытается получить новую учетную запись путем вызова providePurchasingAccount () , что приводит к циклическим ссылкам.

1 Ответ

2 голосов
/ 20 сентября 2011

Метод, который вы извлекаете, находится в классе CustomersModule, а не в Customer.

Подробнее см.

Это зависит от того, как привязан Customer.

В GuiceНа вики-странице, о которой вы упоминаете, не отображается привязка для Клиента.

Представьте, что модуль также имеет этот метод.

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

В том случае, когда учетная запись вводится первой, вызывается этот метод.чтобы получить объект Customer, вызывается providePurchasingAccount для получения учетной записи.

...