최근 비즈니스 계층에서 DataAccessProvider를 구별 할 수있는 인터페이스 계층을 만들었습니다. 이 방법을 사용하면 Web/App.Config의 값을 변경하여 언제든지 DataAccessProvider를 선택할 수 있습니다. (자세한 내용은 필요한 경우 제공 될 수 있음).리플렉션 속도가 느림
어쨌든 이것을 수행하기 위해 리플렉션을 사용하여 우리가 작업 할 수있는 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();
}
}
하지만 이제는 천천히 반사하는 것이 궁금합니다.
벤치마킹 테스트 하네스를 만드는 것이 쉽지 않을까요? – marijne
팩토리가 싱글 톤인 경우 Assembly.Load는 한 번만 호출됩니다. – CVertex
http://stackoverflow.com/questions/25458/how-costly-is-net-reflection?rq=1 – nawfal