zoukankan      html  css  js  c++  java
  • C# 通过反射实现类似MVC路由的机制

      最近封装了个功能非常类似于MVC的路由。//MVC路由机制先找到Controller Action


    • 什么是反射

    反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获 得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数 等。有了反射,即可对每一个类型了如指掌。如果获得了构造函数的信息,即可直接创建对象,即使这个对象的类型在编译时还不知道。


    • 实现思路

    先是根据DLL名称进行装载,然后反射根据类型查找类,在根据方法名查找方法。可能作者才疏学浅写的不是很好,希望大家可以多多指出。帮助我提升。

    以下代码

     1 //获取程序集名称 如果配置程序集名称为空,就使用当前的程序集名称
     2                 var assemblyName = ConfigurationManager.AppSettings["asseName"] == null ? Assembly.GetExecutingAssembly().GetName().Name : ConfigurationManager.AppSettings["asseName"].ToString();
     3                 var className= "className";//类名
     4                 var methodName = "methodName";//方法名
     5 
     6                 if (string.IsNullOrEmpty(assemblyName))
     7                     throw new Exception("程序集名称不能为空");
     8                 if (string.IsNullOrEmpty(className))
     9                     throw new Exception("类名不能为空");
    10 
    11                 //反射指定的DLL,并根据类名查找类 类的访问修饰符一定要是 public
    12                 Type type = Assembly.Load(assemblyName).GetExportedTypes().FirstOrDefault(
    13                     o => o.Name.IndexOf(domainResourceIndex, StringComparison.OrdinalIgnoreCase) >= 0);
    14 
    15                 if (type != null)
    16                 {
    17                     //创建类的实例
    18                     object obj = (object)Activator.CreateInstance(type);
    19                     //根据传入方法名,查找方法
    20                     MethodInfo pMethod = type.GetMethod(methodName);
    21 
    22                     if (pMethod != null)
    23                     {
    24                         //执行
    25                         pMethod.Invoke(obj, new object[] { request, response });
    26                     }
    27                     else
    28                     {
    29                         throw new Exception("没有找到方法");
    30                     }
    31                 }
    32                 else
    33                 {
    34                     throw new Exception("没有找到类");
    35                 }

     转载请注明 http://www.cnblogs.com/cainiaodage/p/3924165.html 

  • 相关阅读:
    PAT Basic 1077 互评成绩计算 (20 分)
    PAT Basic 1055 集体照 (25 分)
    PAT Basic 1059 C语言竞赛 (20 分)
    PAT Basic 1072 开学寄语 (20 分)
    PAT Basic 1049 数列的片段和 (20 分)
    蓝桥杯BASIC-13 数列排序
    蓝桥杯入门——3.序列求和
    蓝桥杯入门——2.圆的面积
    蓝桥杯入门——1.Fibonacci数列
    树的总结(遍历,BST,AVL原型,堆,练习题)
  • 原文地址:https://www.cnblogs.com/cainiaodage/p/3924165.html
Copyright © 2011-2022 走看看