Assembly(程序集) 反射和缓存

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Winfrom
{
    public partial class Form4 : Form
    {
        public Form4()
        {
            InitializeComponent();
        }

        private void Form4_Load(object sender, EventArgs e)
        {
            Assembly asm = Assembly.Load("Winfrom");
            var type = asm.GetType("Winfrom.Test");

            var instance = asm.CreateInstance("Winfrom.Test");

            type.GetProperty("Name").SetValue(instance, "hello world", null);
            type.GetProperty("Id").SetValue(instance, 1, null);

            var method = type.GetMethod("Hello");
            method.Invoke(instance, null);

        }
    }

    public class Test
    {
        private int id;
        private string name;

        public int Id
        {
            get { return this.id; }
            set { this.id = value; }
        }

        public string Name
        {
            get { return this.name; }
            set { this.name = value; }
        }

        public void Hello()
        {
            MessageBox.Show(Name);
        }
    }
}

 

 protected static List<Tuple<string, object, object>> AssembleyCache = new List<Tuple<string, object, object>>();


                        object myObj = null;      
                        MethodInfo myMethod = null;

                        if (AssembleyCache.Exists(c => c.Item1 == labelMethod))
                        {
                            myObj = AssembleyCache.First(c => c.Item1 == labelMethod).Item2;
                            myMethod = (MethodInfo)AssembleyCache.First(c => c.Item1 == labelMethod).Item3;
                        }
                        else
                        {
                            Assembly assembly = Assembly.Load("Yanwen.Online.Common.Print");
                            Type type = assembly.GetType("Yanwen.Online.Common.Print.CreatPdfUtil");

                            myMethod = type.GetMethod(方法名称);
                            myObj = Activator.CreateInstance(type, null);

                            AssembleyCache.Add(new Tuple<string, object, object>(方法名称, myObj, myMethod));
                        }
                        if (myObj != null)
                        {
                            object[] parameter = { expressTypeModel };
                            var result = myMethod.Invoke(myObj, parameter);
                            stream = (MemoryStream)result;
                        }

 

posted @ 2016-05-10 11:59  奇风★逍遥  阅读(320)  评论(0编辑  收藏  举报