zoukankan      html  css  js  c++  java
  • 利用反射从程序集dll中动态调用方法

    利用反射从程序集dll中动态调用方法(附demo下载)

    在某些应用场景下我们需要动态调用某些程序集中的方法,例如某些大型产品中集成子产品、子项目或第三方产品的功能,有一种方式是通过数据持久化的形式来,数据持久化可能是用关系数据库或XML等存储程序集名称、命名空间、类名、方法名、参数类型及值等,这样通过反射结合业务逻辑就可以做出非常好的解耦的组件,这里暂时不考虑持久化和业务逻辑,只是单纯的引入一个demo来实现利用反射动态调用dll中的方法。主要步骤总结如下:

    1、获取程序集的文件名或路径,加载程序集;

                Assembly assembly = null;
                string appPath = Assembly.GetExecutingAssembly().Location;
                appPath = appPath.Substring(0, appPath.LastIndexOf('\\') + 1);
                // 1、获取程序集的文件名或路径,加载程序集
                assembly = Assembly.LoadFrom(appPath + "FactRefect.dll");

    2、获取程序集实例中具有指定名称的 System.Type 对象;

                Type type = null;
                // 2、获取程序集实例中具有指定名称的 System.Type 对象
                type = assembly.GetType("FactRefect.RefectionTest");
               

    3、得到type的target类实例;

    复制代码
     Object obj = null;
                // 3、得到target类实例
                obj = type.InvokeMember(null, BindingFlags.DeclaredOnly |
                                        BindingFlags.Public | BindingFlags.NonPublic |
                                        BindingFlags.Instance | BindingFlags.CreateInstance,
                                        null, null, null);
    复制代码

    4、调用type 类实例中的方法;

    复制代码
            // 4、先调用RefectionTest类中的Set方法,设置x和y值分别为1和2
                type.InvokeMember("Set", BindingFlags.DeclaredOnly |
                                                BindingFlags.Public | BindingFlags.NonPublic |
                                                BindingFlags.Instance | BindingFlags.InvokeMethod,
                                                null, obj, new object[] { 1, 2 });
                // 5、再调用RefectionTest类中的Show方法,来打印出x和y值
                type.InvokeMember("Show", BindingFlags.DeclaredOnly |
                                                BindingFlags.Public | BindingFlags.NonPublic |
                                                BindingFlags.Instance | BindingFlags.InvokeMethod,
                                                null, obj, null);
    复制代码

    Demo源码下载:RefectionTest.zip

     
     
     
    标签: 反射程序集动态
  • 相关阅读:
    第六章 虹销雨霁(中)
    第四章 曙光初现(下)
    第三章 曙光初现(上)
    第二章 福祸相伴(下)
    第二章 福祸相伴(上)
    小云(云层-陈霁)的发展史
    小白成长建议(9)-苞丁解牛
    NYoj 116士兵杀敌(二)区间求和,单点更新
    HDU 1754 区间查询,单点更新
    《灯亮or灯灭》 --有个有趣的数论问题
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2970035.html
Copyright © 2011-2022 走看看