[RESOLVIDO] Vraptor + Guice + Diversas Modules pré-existentes

4 respostas
jurado

Olá, pessoal.

Segui a documentação do site do Vraptor (http://vraptor.caelum.com.br/documentacao/injecao-de-dependencias/) e estou tentando injetar as dependências através dos meus módulos pré-existentes do Guice.

Consegui fazer o que queria, mas a solução me pareceu pouco elegante. Fiz assim:

public class CustomProvider extends GuiceProvider {

	@Override
	protected Module customModule() {
		final Module customModule = super.customModule();

		final DaoFactoryModule daoFactoryModule = new DaoFactoryModule() {
			@Override
			protected void configure() {
				super.configure();
				customModule.configure(binder());
			}
		};

		final CtiManagerModule ctiManagerModule = new CtiManagerModule() {
			@Override
			protected void configure() {
				super.configure();
				daoFactoryModule.configure(binder());
			}
		};

		return new AgentMonitorModule() {
			@Override
			protected void configure() {
				super.configure();
				ctiManagerModule.configure(binder());
			}

		};
	}
}

Como podem ver, eu quero que três AbstractModules específicas sejam consideradas pelo injector, o que equivaleria a instanciar um injector passando-as no construtor:

Guice.createInjector(new DaoFactoryModule(), new CtiManagerModule(), new AgentMonitorModule());

É assim mesmo que isto deve ser feito? Encadeando as modules no provider? Não existe uma forma mais elegante?

4 Respostas

Lucas_Cavalcanti

não dá pra fazer isso?

return new Module() {
    public void configure(Binder binder) {
         binder.install(new DaoFactoryModule());
         binder.install(new CtiManagerModule()));
         binder.install(new AgentMonitorModule());
    }
}
jurado

Funcionou muito bem.

Tks!

jurado

Na verdade, funcionou em partes.

Ele injetou todas as modules, mas não injetou os @Resources da aplicacao.

Funcionou da seguinte forma:

protected Module customModule() {
		final Module module = super.customModule();
		return new AbstractModule() {
			@Override
			protected void configure() {
				module.configure(binder());
				install(new DaoFactoryModule());
				install(new CtiManagerModule());
				install(new AgentMonitorModule());
				install(new DdsAgentMonitorModule());
			}
		};
	}

Obrigado!

Lucas_Cavalcanti

ah sim, tinha que registrar o pai também, tinha esquecido =)

(pode ser install(module) tb)

Criado 4 de outubro de 2011
Ultima resposta 5 de out. de 2011
Respostas 4
Participantes 2