리플렉션을 사용하기 전에는 프로젝트 간 호출의 일반적인 관행은 프로젝트 수준에서 참조를 추가하는 것이었습니다.
예: Client 클래스가 MysqlHelper 클래스를 호출하는 경우
먼저 MysqlHelper 프로젝트를 생성하고
MysqlHelper를 추가합니다. Client 클래스 .dll,
을 Client 메서드에서 인스턴스화하고 메서드를 호출합니다.
Reflection을 사용한 후에는 보다 유연하게 구성하여 사용할 수 있습니다.
위와 같이 클라이언트는 데이터베이스 인터페이스를 호출해야 하는데, 데이터베이스에서는 어떤 데이터베이스를 하드코딩할지 알 수 없습니다(MySQL, SQLServer, Oracle... )
먼저 인터페이스를 정의합니다. 인터페이스에 Query() 메서드가 하나만 있다고 가정합니다. 그러면 새로 추가된 DB 유형이 원본 프로젝트에 영향을 미치지 않으므로 개방형 및 폐쇄형 원칙(수정 폐쇄형, 확장 폐쇄형).
인터페이스 클래스 DbHelper.cs
using System; namespace IHelper { public class DbHelper { public DbHelper() { Console.WriteLine("This is DbHelper construction"); } public virtual void Query() { Console.WriteLine("This is query method"); } } }
OracleDbHelper.cs
using System; using IHelper; namespace OracleHelper{ public class OracleDbHelper : DbHelper { public override void Query() { base.Query(); Console.WriteLine("This is query from OracleDbHelper"); } } }
MySqlDbHelper.cs
using System; using IHelper; namespace MySqlHelper{ public class MySqlDbHelper :DbHelper { public override void Query() { base.Query(); Console.WriteLine("This is query method from MySqlDbHelper"); } } }
클라이언트측 Program.cs 호출:
호출 데이터베이스 도움말 클래스 프로젝트에서 생성된 dll 및 pdb 파일을 클라이언트 bin 디렉터리에 배치한 다음 App.config에 구성을 추가한 다음 Reflection 아래의 Assembly 클래스를 사용하여 구현합니다.
Program.cs
static void Main(string[] args){ string config = ConfigurationSettings.AppSettings["DbHelper"]; Assembly assembly = Assembly.Load(config.Split(',')[0]); Type typeHelper = assembly.GetType(config.Split(',')[1]); Object oHelper = Activator.CreateInstance(typeHelper); DbHelper dbHelper = (DbHelper) oHelper; dbHelper.Query(); Console.Read(); }
클라이언트 App.config 구성:
<?xml version="1.0" encoding="utf-8" ?><configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <appSettings> <!--<add key="DbHelper" value="MySqlHelper,MySqlHelper.MySqlDbHelper"/>--> <add key="DbHelper" value="OracleHelper,OracleHelper.OracleDbHelper"/> </appSettings></configuration>
실행 결과
위 내용은 C# Reflection 반영 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(m.sbmmt.com)를 참고해주세요!