Básicamente borré esa clase e hice que mis repositorios heredaran directamente de ObjectContext. Un ejemplo de una clase repositorio es la siguiente:
namespace mtcholakian.samples.TestDDD.Data.Repositories
{
public class CustomerRepository : GenericRepository<Customer>, ICustomerRepository
{
public CustomerRepository(string connectionString)
: base(connectionString)
{
}
}
}
Si observan en el constructor de la clase, estamos esperando una cadena de conexión. Esta cadena la tomo desde el App.Config o archivo de configuración. Ahora bien, el contenedor de Unity es el que me devuelve una instancia de CustomerRepository, pero cómo hago para pasarle ese parámetro de conexión? Fácil, nuestro App.Config tendrá que lucir de la siguiente manera:
Aquí se le dice que el valor del connectionString es "SampleDbEntities", lo cual es el nombre del key de la sección connectionString que va a estar declarada dentro del App.Config también.
Ahora, una cosa más y lo más interesante de todo es que tenemos un atributo typeConverter. Lo que nos dice es que al pasarle al constructor el parámetro connectionString lo resuelva esa clase, que tenemos que definir más arriba de la siguiente forma por ejemplo:
Y ahora simplemente vemos la definición en sí de la clase:
namespace mtcholakian.samples.TestDDD.Utils
{
public class ConnectionStringTypeConverter : TypeConverter
{
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
{
return ConfigurationManager.ConnectionStrings[value.ToString()].ConnectionString;
}
}
}
Lo que hace es recibir un valor, en nuestro caso será el que definimos en el parámetro param, "SampleDBEntities" y en base a ese string devuelve la entrada de connectionStrings del App.Config que contiene la conexión a la base de datos.
Listo!
Una cosa muy importante es que la declaración de los tipos del unity aplica únicamente a Unity 2.0, no a la versión 1.4, ya que utilizaba un elemento typeConfig del tipo TypeInjectionElement que no viene más a partir de la versión 2.0.
Espero les haya sido útil.
Saludos,
Mike
No hay comentarios:
Publicar un comentario