/// <summary> /// 어셈블리 파일 처리 /// </summary> /// <param name="path">dll file 경로</param> private void LoadAssembly(string path) { Assembly assem; Type[] types; // Assembly 파일 로드 try { assem = Assembly.LoadFrom(path); if (assem == null) { throw new Exception("DLL 로드에 실패 했습니다. 지정되지 않은 오류."); } } catch (Exception ex) { ErrorTraceForm form = new ErrorTraceForm(ex, System.Reflection.MethodBase.GetCurrentMethod()); form.ShowDialog(); return; } // 등록된 Class 목록 가져오기 try { types = assem.GetTypes(); } catch (ReflectionTypeLoadException ex) { // 클래스를 로드할 수 없을 경우 ErrorTraceForm form = new ErrorTraceForm(ex, System.Reflection.MethodBase.GetCurrentMethod()); form.ShowDialog(); return; } // 항목 콤보박스에 담기 _dtClass.Clear(); foreach (Type type in types) { // UserControl, Form 만 처리함 그외는 무시 if (type.BaseType == null) { continue; } _dtClass.Rows.Add(new object[] { type.FullName, string.Format("({0}) {1}", type.BaseType.Name, type.Name) }); } // 선택 DLL 정보 셋팅 txtDllPath.Text = path; _assemblyHandler.Assem = assem; }
/// <summary> /// 파일 오픈 /// </summary> private void OpenControl() { object control; Assembly assem; Type classType; if (!_assemblyHandler.GetAssemblyType(out assem, out classType)) { return; } // 컨트롤 조회 try { // 파라미터 값 조회 object[] args = GetArgs(); // 불러오기 control = assem.CreateInstance( classType.FullName, true, BindingFlags.CreateInstance, null, args, null, null); // 값이 없을 경우 if (control == null) { throw new Exception("컨트롤 조회 결과 값이 없습니다."); } } catch (Exception ex) { ErrorTraceForm form = new ErrorTraceForm(ex, System.Reflection.MethodBase.GetCurrentMethod()); form.ShowDialog(); return; } // 컨트롤 탭 불러오기 SetTabPage(assem, classType, control); }
/// <summary> /// 생성자 리스트 셋팅 /// </summary> private void SetConstructorList() { string classFullName = lueClass.EditValue.ToString(); Type classType; Assembly assem; txtClassName.Text = classFullName; if (!_assemblyHandler.GetAssemblyType(out assem)) { return; } // Assembly 안에 Class 를 추출함 try { classType = assem.GetType(classFullName); } catch (Exception ex) { ErrorTraceForm form = new ErrorTraceForm(ex, System.Reflection.MethodBase.GetCurrentMethod()); form.ShowDialog(); return; } // 추출한 클래스를 Tag에 담음 _assemblyHandler.SelectionType = classType; // 기존 항목 초기화 _dtConstruct.Clear(); // 생성자 리스트 셋팅 foreach (ConstructorInfo constructorInfo in classType.GetConstructors()) { StringBuilder param = new StringBuilder(); string paramString = string.Empty; // 파라미터 셋팅 foreach (ParameterInfo parameterInfo in constructorInfo.GetParameters()) { if (parameterInfo.Position != 0) { param.Append("|"); } param.AppendFormat("{0} ({1})", parameterInfo.Name, parameterInfo.ParameterType.Name); } if (param.ToString().Length == 0) { paramString = "(기본 빈 생성자)"; } else { paramString = param.ToString(); } _dtConstruct.Rows.Add(new object[] { constructorInfo.ToString(), paramString, constructorInfo }); } // 최초 빈값 셋팅 lueConstruct.ItemIndex = 0; }