9 dic 2010

Unity - Inyectar dependencias genéricas

Siguiendo con mis entradas anteriores y con la implementación de mi patrón Repositorio, se me ocurrió inyectar una dependencia en el constructor de una clase.
Unity resuelve en forma automática las dependencias en un constructor, lo cual significa que no tenemos que declarar ese parámetro explícitamente dentro de la sección <types>. En mi caso estoy declarando los mapeos en el archivo de configuración (App.Config), entonces cuando el contenedor detecte esa dependencia en el constructor, automáticamente le inyectará la implementación que hayamos declarado.
Lo interesante es cómo inyectar una dependencia y que esta además sea genérica.
Paso a detallar mi clase en cuestión:
    

public class CustomerRepository : GenericRepository<Customer>, ICustomerRepository
{
//la interfaz genérica es la que el contenedor de Unity debe resolver
public CustomerRepository(IContext<Customer> context) : base(context)
{
}

}


Nuestro archivo de configuración tendrá un aspecto similar al siguiente:


<typeAlias alias="IContext`1" type="mtcholakian.samples.TestDDD.Business.Core.IContext`1,Business.Core"/>
<typeAlias alias="Context`1" type="mtcholakian.samples.TestDDD.Data.Context.Context`1,Data"/>


Observen cómo se declara un generics y luego la clase que lo implementa.
Finalmente dentro de nuestro container declaramos el mapeo:
    
<container name="RootContainer">
<types>
<type type="IContext`1" mapTo="Context`1" name=""></type>
</types>
</container>


Luego, cuando desde la aplicación instanciemos CustomerRepository obtendremos una instancia en el constructor con la clase indicada.
Espero les haya sido útil.
Saludos,
Mike

No hay comentarios:

Publicar un comentario