public void ReflectAssembly(List<DataTable> tables, string iteGuid, Dictionary<string, string> tableKeys)
{
string path = string.Format(@"E:\OGT\LogicCheckProcessExecutor\Build\Debug\AssemblyDirectory\TimeCopy.dll");
Assembly assembly = Assembly.LoadFile(path);
string typeName = string.Format("TimeCopy. TimeCopy ");//类的FullName即”命名空间.类名”的
Type type = assembly.GetType(typeName, false, false);//根据类的名称,获得类的Type
//生成控件对象
//GetConstructo()里的参数new Type[]{}是构造函数中传进去的参数的类型
//在该示例中public TimeCopy(List<DataTable> tables, string itemGuid, Dictionary<string, string> tableKeys)
// : this()
// {
// DataSourceTables = tables;
// ItemGuid = itemGuid;
// TableKeys = tableKeys;
// }
ConstructorInfo constructInfo = type.GetConstructor(new Type[] { typeof(List<DataTable>), typeof(string), typeof(Dictionary<string, string>) });
//给构造函数里的参数传值
object obj = constructInfo.Invoke(new object[] { tables, iteGuid, tableKeys });
//注册事件
//ProcessExecuteForm是当前类的名字,因为事件方法timeCopy_EndEdit在当前类里,想注册的事件在哪个类里,前面的Type就写哪个类的Type
MethodInfo myEndEditHandler = typeof(ProcessExecuteForm).GetMethod("timeCopy_EndEdit", BindingFlags.NonPublic | BindingFlags.Instance);
RegisteEvent(type, obj, "EndEdit", myEndEditHandler);
//展示控件
ShowForm showForm = new ShowForm();//ShowForm是一个窗体,用来展示控件
showForm.Controls.Clear();
showForm.Controls.Add(obj as UserControl);//示例TimeCopy是一个继承于UserControl的控件类
showForm.ShowDialog();
}
private void RegisteEvent(Type type, object target, string eventName, MethodInfo myEndEditHandler)
{
EventInfo eventEndEdit = type.GetEvent(eventName);//获取事件
Type tEndEdit = eventEndEdit.EventHandlerType;
//tEndEdit要创建委托的System.Type,this委托要绑定的对象,myEndEditHandler描述委托要表示的静态或实例方法
Delegate dEndEdit = Delegate.CreateDelegate(tEndEdit, this, myEndEditHandler);//创建委托
eventEndEdit.AddEventHandler(target, dEndEdit);//给事件添加委托(注册事件)
}
private void timeCopy_EndEdit(object sender, OGT.SJLJJC.Execute.EventAgs.EndEditEventArgs e)
{
// OGT.SJLJJC.Execute.EventAgs.EndEditEventArgs e是自定义的事件参数
//public class EndEditEventArgs : EventArgs
//{
// public DataTable Data { get; set; }
// public string ItemGuid { get; set; }
// public EndEditEventArgs()
// : base()
// {
// }
//}
if (e.Data == null)
return;
else
MessageBox.Show("结束");
}
反射程序集
最新推荐文章于 2024-05-16 16:10:41 发布