Недавно я создал интерфейсный слой, чтобы отличить DataAccessProvider от нашего уровня бизнес-логики. При таком подходе мы можем изменить наш выбор DataAccessProvider всякий раз, когда хотим, изменив значения в Web/App.Config. (при необходимости можно указать более подробную информацию).
В любом случае, для этого мы используем рефлексию для выполнения нашего класса DataProvider, над которым мы можем работать.
/// <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();
}
}
Но теперь мне интересно, как медленное отражение?