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

     
     
     
    标签: 反射程序集动态
  • 相关阅读:
    8天学通MongoDB(实际操作版)——第九天 构建学习型部署环境
    构建Ubuntu Server试验环境
    8天学通MongoDB(实际操作版)——第一天 基础入门
    《JAVA与模式》之适配器模式
    wsdl
    Axis2 Fault: Transport out has not been set
    诺基亚E63常见设置指南
    java面试题总结
    R400 安装XP后 ati2dvag蓝屏解决办法
    深入理解Java多态性
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2970035.html
Copyright © 2011-2022 走看看