2013-07-22 4 views
0

У меня есть класс Worker, у которого есть конструктор, который принимает 3 аргумента, каждый из которых имеет класс со своими зависимостями.Guice, вводящий несколько параметров в конструктор

private A a; private B b; private C c; 

@Inject 
public Worker(A a, B b, C c) { 
    this.a = a; this.b = b; this.c = c; 
} 


public void run() {...} 

В моей основной, который находится в классе Worker, у меня есть:

public void main(String[] args) throws Exception { 
    Injector injector = Guice.createInjector(new WorkerModule()); 
    a = injector.getInstance(A.class); 
    b = injector.getInstance(B.class); 
    c = injector.getInstance(C.class); 

    run(); 

} 

Мой вопрос, как я должен настроить свой модуль, чтобы позволить для GetInstance для работника (т.е. injector.getInstance (Worker.class)), поэтому мне не нужно было бы вызывать 3 инжектора.getInstances для разных классов зависимостей? И как мне назначить рабочего в рабочем классе? Благодарю.

ответ

0

Прежде всего, по умолчанию у Guice включена функция включения по требованию, поэтому, если ваши A, B и C являются не абстрактными классами, ваш модуль может быть пустым. Guice будет автоматически разрешать зависимости, если вы спросите его, например Worker класса:

Worker worker = injector.getInstance(Worker.class); 

Здесь Guice будет автоматически создавать A, B и C экземпляров и предоставить его Worker конструктор.

Во-вторых, ваш метод main нестационар. Он не будет работать как точка входа для вашей программы. Вы должны сделать его статичным. Тогда это может выглядеть так:

public static void main(String[] args) throws Exception { 
    Injector injector = Guice.createInjector(new WorkerModule()); 

    Worker worker = injector.getInstance(Worker.class); 
    worker.run(); 
} 
+0

спасибо. это сработало. – Mozbi

+0

@Mozbi, если ответ был полезен, вы должны его принять. Вот как работает stackoverflow :) –

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