反射程序集

来源:互联网 发布:sql select where or 编辑:程序博客网 时间:2024/05/16 23:35
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("结束");        }
0 0