好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

利用反射从程序集dll中动态调用方法

利用反射从程序集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

 

 

 

标签:  反射 ,  程序集 ,  动态

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于利用反射从程序集dll中动态调用方法的详细内容...

  阅读:55次