2016-09-16 3 views
3

У меня есть эта проблема.Связанная с Guice привязка по сравнению с методом @Provides

Рассмотрим меня есть определения классов, как:

public interface ABCInterface 
{ 
} 

и его реализация:

public class ABCImpl 
{  
    @Inject 
    private XYZ xyz; 
} 

Когда Guice Config, как это:

public class MasterConfig extends AbstractModule 
{  
    @Override 
    protected void configure() 
    { 
    // TODO Auto-generated method stub 
    bind(ABCInterface.class) 
    .to(ABCImpl.class); 
    } 
} 

и запустить его, то все отлично работает, и XYZ вводится в него.

Но когда я использую методы поставщика, как это:

public class MasterConfig extends AbstractModule { 

    @Override 
    protected void configure() { 
     // TODO Auto-generated method stub 
    } 

    @Provides 
    public ABCInterface abc() { 
     return new ABCImpl(); 
    } 
} 

Тогда, в этом случае, я получаю исключения нулевого указателя при попытке использовать впрыскивается XYZ, потому что объект остается пустым. Я подозреваю, что это ядро, я возвращаю новый объект ABCImpl и, следовательно, Guice не может построить граф зависимостей. Пожалуйста, поправьте меня, если я ошибаюсь здесь?

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

ответ

3

Действительно, когда вы пишете new ABCImpl(), у Guice нет возможности ввести свои зависимости. Вы можете сделать это:

@Provides 
ABCInterface abc(ABCImpl impl) { 
    return impl; 
} 

но вы можете также просто написать bind(ABCInterface.class).to(ABCImpl.class); в том случае, если ваш метод провайдер не имеет некоторую дополнительную логику.

+0

Awesome, спасибо :) –

 Смежные вопросы

  • Нет связанных вопросов^_^