夜微凉、的博客

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

反射的基本概念: .Net Framework 中提供了反射机制,可以再加载程序运行时,动态获取和加载程序集,并且可以获取到程序集的信息

创建Assembly和Entity两个程序集,在Assembly中添加Entity引用,如下图:

namespace Entity
{
    public class GetData
    {
        public static SIMPEntities SIMP = new SIMPEntities();

        /// <summary>
        /// 查询方法--返回序列化json
        /// </summary> 
        /// <returns></returns>
        public string GetResule()
        { 
            JavaScriptSerializer Serialize = new JavaScriptSerializer(); 
            var list = SIMP.Sys_Employee
                .Select(a => new { id = a.EmpId, EmpName = a.EmpName, PositionName = (a.Sys_Position!=null)?a.Sys_Position.PositionName:"" })
                .ToList(); 
            return Serialize.Serialize(list);  
        } 
    }
}
namespace AssemblyTest
{
    class Program
    {
        private static Program pro = new Program(); 
        static void Main(string[] args)
        { 
            pro.GetAssemblyInfo();

            pro.LoadAssembly();  
            Console.ReadLine();
        } 
        /// <summary>
        /// 动态读取DLL,执行其中的方法
        /// </summary>
        public void LoadAssembly()
        {
            //DLL所在的绝对路径 
            Assembly assembly = Assembly.LoadFrom(AppDomain.CurrentDomain.BaseDirectory + "Entity.dll");
            //注意写法:程序集.类名  
            Type type = assembly.GetType("Entity.GetData");
            //获取类中的公共方法GetResule                                              
            MethodInfo methed = type.GetMethod("GetResule"); 
            //创建对象的实例
            object instance = System.Activator.CreateInstance(type);
            //执行方法  new object[]为方法中的参数
            object result = methed.Invoke(instance, new object[] { });
        } 
        /// <summary>
        /// //获取程序集信息
        /// </summary>
        public void GetAssemblyInfo()
        {
            Type type = typeof(Program);
            Assembly assembly = Assembly.GetExecutingAssembly();
            Console.WriteLine("命名空间:{0}", type.Namespace);
            Console.WriteLine("程序集:{0}", type.Assembly);
            Console.WriteLine("类的名字{0}", type.Name);
            Console.WriteLine("类的全部名字{0}", type.FullName);
            Console.WriteLine("基类:{0}", type.BaseType);
            Console.WriteLine("----------------------------");
            Console.WriteLine("程序集的名称:{0}", assembly.GetName());
            Console.WriteLine("程序集的全名:{0}", assembly.FullName);
            Console.WriteLine("程序集的版本:{0}", assembly.GetName().Version);
            Console.WriteLine("程序集的位置:{0}", assembly.Location);
            Console.WriteLine("程序集所在目录:{0}", AppDomain.CurrentDomain.BaseDirectory);
        }
    }
}

 

posted on 2016-09-25 20:07  夜、微凉  阅读(8767)  评论(0编辑  收藏  举报