using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Windows.Forms;
namespace DrawGraph
{
public class BoardFormUtil
{
public static AreaManageBase AreaManageFactory(string instanceName, object parameter, ZedGraphControl parameter1, TemplateManage parameter2, string parameter3)
{
AreaManageBase reValue = null;
try
{
Assembly assembly = Assembly.GetExecutingAssembly(); // 获取当前程序集
//object obj = assembly.CreateInstance("ReflectionTest.Test"); //类的完全限定名(即包括命名空间)
object[] parameters = new object[4];
parameters[0] = parameter;
parameters[1] = parameter1;
parameters[2] = parameter2;
parameters[3] = parameter3;
reValue = (AreaManageBase)assembly.CreateInstance("DrawGraph." + instanceName, true, System.Reflection.BindingFlags.Default, null, parameters, null, null);// 创建类的实例
if(reValue == null)
reValue = (AreaManageBase)assembly.CreateInstance("DrawGraph.document." + instanceName, true, System.Reflection.BindingFlags.Default, null, parameters, null, null);
if (reValue != null) reValue.ClassName = instanceName;
}
catch(Exception )
{
}
return reValue;
}
///
///
///
///
/// DLL文件名,必须在当前运行项目的目录里
/// 命名空间名
/// 类名
///
public static T GetObjectFactory(string dllName,string nameSpace,string instanceName){
T reValue;
try
{
Assembly assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + dllName);//你的loadfile
//Assembly assembly = Assembly.GetExecutingAssembly(); // 获取当前程序集
//object obj = assembly.CreateInstance("ReflectionTest.Test"); //类的完全限定名(即包括命名空间)
reValue = (T)assembly.CreateInstance(nameSpace + instanceName, true, System.Reflection.BindingFlags.Default, null, null, null, null);// 创建类的实例
}
catch
{
reValue = default;
}
return reValue;
}
///
/// 获取对象的所有属性列表
///
///
///
public static List GetPropertyList(Object obj, TemplateManage template = null)
{
List propertyList = new List();
if (obj != null)
{
Type type = obj.GetType();
PropertyInfo[] infos = type.GetProperties();
foreach (PropertyInfo info in infos)
{
try {
Attribute[] attribs = Attribute.GetCustomAttributes(info);
Attribute attrib = attribs.FirstOrDefault(s => s is NoCreatControlAttributs);
//如果增加了NoCreatControlAttributs这个属性的属性则不生成列表
if (attrib != null) continue;
PropertyObject proObj = new PropertyObject();
proObj.Key = info.Name;
Attribute attDesc = attribs.FirstOrDefault(s => s is ClassAttributs);
if (attDesc != null)
{
ClassAttributs cattr = attDesc as ClassAttributs;
if (cattr != null)
{
proObj.Description = cattr.Description;
}
}
//如果不是值类型,且没标明ClassAttributs属性标签的引用类型,就继续往下循环
if (info.PropertyType != typeof(Color) && info.PropertyType != typeof(int) && info.PropertyType != typeof(string) && info.PropertyType != typeof(DateTime) && info.PropertyType != typeof(Decimal) && info.PropertyType != typeof(bool) && info.PropertyType != typeof(Nullable) && info.PropertyType != typeof(Nullable) && info.PropertyType != typeof(Nullable) && info.PropertyType != typeof(Nullable))
{
proObj.SubPropertyList = GetPropertyList(info.GetValue(obj, null), template);
}
else
{
object val = info.GetValue(obj, BindingFlags.GetProperty, null, null, null);
proObj.Value = (val != null) ? val.ToString() : "";
proObj.Text = proObj.Value;
}
propertyList.Add(proObj);
} catch (Exception exp) {
MessageBox.Show(exp.Message.ToString());
}
}
}
else
{
//Console.WriteLine(obj.ToString());
}
return propertyList;
}
}
}