Recientemente he creado una capa de interfaz para distinguir el DataAccessProvider de nuestra capa de lógica empresarial. Con este enfoque podemos cambiar nuestra elección de DataAccessProvider cuando lo deseemos cambiando los valores en la Web/App.Config. (se pueden dar más detalles si es necesario).Qué tan lento es Reflection
De todos modos, para hacer esto utilizamos la reflexión para llevar a cabo nuestra clase DataProvider en la que podemos trabajar.
/// <summary>
/// The constructor will create a new provider with the use of reflection.
/// If the assembly could not be loaded an AssemblyNotFoundException will be thrown.
/// </summary>
public DataAccessProviderFactory()
{
string providerName = ConfigurationManager.AppSettings["DataProvider"];
string providerFactoryName = ConfigurationManager.AppSettings["DataProviderFactory"];
try
{
activeProvider = Assembly.Load(providerName);
activeDataProviderFactory = (IDataProviderFactory)activeProvider.CreateInstance(providerFactoryName);
}
catch
{
throw new AssemblyNotFoundException();
}
}
Pero ahora me pregunto cómo es la reflexión lenta?
Seguramente sería trivial crear un arnés de prueba para compararlo? – marijne
Si la fábrica es un singleton, entonces Assembly.Load solo se llama una vez? – CVertex
http://stackoverflow.com/questions/25458/how-costly-is-net-reflection?rq=1 – nawfal