5) Como usar o DIFilter junto com o IoCFilter ?
A diferença entre IoC e DI é simples: IoC (Inversão de Controle) é o responsável pela criação e pelo controle do ciclo de vida de um componente. Por exemplo, um componente no escopo da sessão terá uma nova instância criada automaticamente a cada nova sessão pelo IoCFilter.
Já o DI (Injeção de Dependência) é o responsável pelo interligamento dos componentes, uma vez que um componente pode depender de outro para executar sua função.
Um exemplo clássico é um DAO (Data Access Object) que depende de uma Connection para ir ao banco de dados.
Code:
// definindo um componente userDao que gerará instâncias
// a partir da classe MySQLUserDao
ioc("userDAO", MySQLUserDAO.class);
// o filtro global que transforma o Mentawai num container de IoC
filter(new IoCFilter());
// o filtro de conexão que usa um pool de conexoes por tras
// para prover uma conexão ao input da action...
filter(new ConnectionFilter("connection", connHandler));
// o filtro de DI que se encarrega de injetar uma Connetion
// em todos os componentes que precisam de uma connection
filter(new DIFilter("connetion", Connection.class));
Note que o DIFilter vai buscar a dependência no input da action, utilizando a chave "connection".
Repare que o DIFilter pode e deve ser um filtro global, de forma que todas as action terão seus componentes automaticamente completados com suas dependências. (auto-wiring)