C# DLL 확인 -- 반사
내가 한 예는 DLL을 읽는 경로를 통해 DLL을 불러온 다음에 DLL의 클래스 이름을 읽고, 모든 클래스의 속성, 클래스와 속성의 특성을 훑어보는 것이다.
주요 코드는 다음과 같습니다.
1. 프로그램 집합을 불러오기:
A ssembly ass=Assembly.LoadFrom(DllPath); Assembly.LoadFile은 지정된 파일만 로드하고 종속 프로그램 세트는 자동으로 로드되지 않습니다.Assmbly.Load는 나중에 이름을 끊을 필요가 없습니다. 2. 유형의 이름 공간과 이름을 이용하여 클래스의 유형 Type type=ass.GetType("Type Name")을 얻을 수 있습니다.3. 지정된 매개변수 인스턴스 유형 Object bj = Activator를 사용합니다.CreateInstance(type,params[]); 4, 방법 명칭을 통해 획득 방법 MethodInfo mi=type.GetMethod(“MehtodName”);
5. 매개 변수의 직선 방법에 따라 반환값은 원래 방법의 반환값이다
mi.Invoke(obj,params[]); 6、로드 클래스의 속성
PropertyInfo p = this.GetType().GetProperty("xxx");
예는 다음과 같습니다.
///
/// DLL
///
///
public ActionResult LoadEntityDll(string path)
{
// DLL
LoadDLL dld = new LoadDLL(path);
ass = new LoadDLL(path).GetAssembly();
//DynamicLoadDLL.LoadDLL dld = new DynamicLoadDLL.LoadDLL(path);
// DLL
foreach (var types in dld.GetTypes())
{
// ---
if (types.GetCustomAttributes(typeof(ClassesAttribute),false)!=null )
{
string name = types.Name;
ClassesAttribute className = (ClassesAttribute)types.GetCustomAttributes(typeof(ClassesAttribute), true).FirstOrDefault(); // ___
A a=new A();
a.EntityName = name;
if (className!= null)
{
a.EntityDesc = className.TableName;
}
else
{
a.EntityDesc = name;
}
//
string strnamespace = types.Namespace;
DynamicLoadProperty(strnamespace, name, a);
}
}
return View("xx");
}
///
/// --
///
public void DynamicLoadProperty(string strnamespace, string classname, A a)
{
aWCF = UIServiceFactory.GetQueryPropertiesService();
LoadClass dlc = LoadClass.GetInstance(ass, strnamespace, classname);
#region --
foreach (var attrs in dlc.GetAttrs())
{
//
a.ControlHtmlId = attrs.Name;
//
//DisplayAttribute temDesc = (DisplayAttribute)attrs.GetCustomAttributes(typeof(DisplayAttribute), true).FirstOrDefault();
ColumAttribute temDesc = (ColumAttribute)attrs.GetCustomAttributes(typeof(ColumAttribute), true).FirstOrDefault();
if (temDesc != null)
{
a.PropertyDesc = temDesc.ColumName;
}
else
{
a.PropertyDesc = attrs.Name;
}
}
#endregion
}
#endregion
요약: 위의 두 가지 방법 중 하나는 DLL을 로드하는 클래스이고 하나는 읽기 클래스의 속성입니다. 사실 여러분이 자세히 살펴보면 알 수 있습니다.이 코드의 눈과 한마디가 반사라고 생각합니다.
ass = new LoadDLL(path).GetAssembly();
나머지 로드 클래스, 로드 방법, 로드 속성, 로드 특성은 모두 겸사겸사 하는 일입니다.그런데 시작할 때 생각지도 못했어?왜?
사후에 반성하면 첫째, 코드 경험이 부족하다는 것이고, 둘째, 이 문제를 조용히 생각하지 않았다는 것이다.예전에는 디자인 모델을 공부할 때 접촉반사를 했는데, 지금은 반사의 원리를 이해하지 못한 것 같다.반사본은 문자열을 통해 클래스를 찾을 수 있는 '클래스를 읽는 방식' 이다.이번에는 반사에 대한 누락과 결원을 보충하는 셈이다.마지막으로 반사라는 개념을 여러분께 공유합니다.http://www.csharpwin.com/csharpspace/8982r7645.shtml.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
NPOI Excel 여러 개를 하나의 Excel로 결합구현 코드 Nuget에서 NPOI 검색 및 설치 NPOI를 사용하여 참조를 추가합니다.HSSF.UserModel;...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.