程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 反射學習系列3-反射實例應用(3)

反射學習系列3-反射實例應用(3)

編輯:關於C語言

App.config配置

<?XML version="1.0" encoding="utf-8" ?>
< configuration>
 <aPPSettings>
  <add key="LogType" value="LogClassLibrary.TextFileLog"/>
  <!--
  本程序集配置
  <add key="LogType" value="ConsoleApplication2.Log例子.TextFileLog"/>
  -->
  <!-- XMLFileLog TextFileLog-->
  <add key="LogTarget" value="c:\log.txt"/>
 </aPPSettings>
< /configuration>

主程序

public static void Main()
    {
      #region 同程序集下
      System.Type type = System.Type.GetType(ConfigurationManager.APPSettings["LogType"].ToString());
      ILog log = (ILog)Activator.CreateInstance(type);
      log.Write(new Exception("異常測試"));
      #endregion
    }

如果在不同的程序集下,那主函數和配置會略有不同

不同程序集主函數

public static void Main()
    {

      #region 不同程序集
      string assemblyPath = Path.Combine(Environment.CurrentDirectory, "LogClassLibrary.dll");
      Assembly a = Assembly.LoadFrom(assemblyPath);
      Type type = a.GetType(ConfigurationManager.APPSettings["LogType"].ToString());
      LogClassLibrary.ILog log = (LogClassLibrary.ILog)type.InvokeMember(null,BindingFlags.CreateInstance,null,null,null);
      log.Write(new Exception("異常測試"));
      #endregion

    }

2、插件編程技術

插件是指遵循一定的接口規范、可以動態加載和運行的程序模塊。從上面的例子可以看出,通過反射可以非常方便的動態加載程序集。因此,利用反射的動態加載代碼能力,可以很容易的實現插件。插件編程的要點是使用接口來定義插件的功能特征。插件的宿主程序通過接口來確認、裝載和執行插件的功能,實現插件功能的所有類都必須實現定義插件的接口。

這裡只是選貼一部分代碼,詳細分析請看源碼

結構圖

接口部分

publicinterfaceIHost
  {
    List<ILog>Plugins{get;}
    intLoadPlugins(stringpath);
    ILogGetLog(stringname);
  }
publicinterfaceILog
  {
    boolWrite(stringmessage);
    boolWrite(Exceptionex);
  }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved