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

     
     
     
    标签: 反射程序集动态
  • 相关阅读:
    WalkDirFiles
    http://ocpj8.javastudyguide.com/
    打印文件夹中的文件
    apple
    JDBC
    JDBC connection
    Properties-getProperty
    删除目录中指定文件
    spark 之knn算法
    hbase查询基于标准sql规范中间件Phoenix
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2970035.html
Copyright © 2011-2022 走看看