Как настроить Google-Guice с использованием универсального интерфейса? - PullRequest
4 голосов
/ 26 мая 2011

У меня есть несколько фабрик типов сущностей, которые являются производными от общего универсального интерфейса.Например,

public class ConnectionFactory implements IEntityFactory<Connection> { ... }

Я бы хотел использовать Google-Guice для преодоления жестких зависимостей от этих фабрик.

Однако при попытке настроить Guice возникает синтаксическая ошибка:

public class EntityFactoryModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(IEntityFactory<Connection>.class).to(ConnectionFactory.class);
    }
}

Eclipse говорит: «IEntityFactory не может быть преобразована в переменную».

Может кто-нибудь помочь, пожалуйстая понимаю, почему это не работает?Кроме того, есть ли альтернативный синтаксис, который будет работать?

Ответы [ 2 ]

8 голосов
/ 26 мая 2011

Мой Guice-fu, как правило, ограничен, но я думаю, что вы хотите здесь буквальный тип:

bind(new TypeLiteral<IEntityFactory<Connection>>() {})
    .to(ConnectionFactory.class);
0 голосов
/ 26 мая 2011

Один из способов - объявить новый интерфейс:

interface IConnectionFactory extends IEntityFactory<Connection> { ...}

Тогда я могу сделать:

bind(IConnectionFactory.class).to(ConnectionFactory.class);

Но в моем проекте уже происходит взрыв интерфейса. Есть ли лучший способ?

...