C# - 使用配置文件和反射來創建對象實例


使用配置文件和反射來創建對象實例

為了增加程序的可擴展性,提高可配置性,常常需要使用配置文件+反射來動態調用方法。

下面定義的SIT類包含一個接口方法,演示如何使用配置文件及反射來動態調用。

using System; 
namespace ConsoleApp1.CRMDataHandler
{
  public class SIT : CRMDataHandler, IIncident
  {
    public void CreateIncident()
    {
      Console.WriteLine("{0} CreateIncident", this.GetType());
    }
  }
}

配置文件如下:

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<appSettings>

<add key="ClassName" value="ConsoleApp1.CRMDataHandler.SIT" />

<add key="MethodName" value="CreateIncident" />

</appSettings>

</configuration>

 

實例化代碼,兩種方式創建實例化對象:

/// <summary>
/// 使用Activator創建對象實例
/// </summary>

public static void CreatedByActivator()
{

  string typeName = ConfigurationManager.AppSettings.Get("ClassName");

  string methodName = ConfigurationManager.AppSettings.Get("MethodName");

  Type t = Type.GetType(typeName);

  object instance = Activator.CreateInstance(t); //創建實例

  //object result = t.InvokeMember(methodName, BindingFlags.InvokeMethod

  // , null, instance, null); //調用方法

  t.GetMethod(methodName).Invoke(instance, null);

} 

/// <summary>
/// 使用構造函數創建對象實例
/// </summary>
public static void CreatedByConstructor()
{

  string typeName = ConfigurationManager.AppSettings.Get("ClassName");

  string methodName = ConfigurationManager.AppSettings.Get("MethodName");

  Type t = Type.GetType(typeName);

  ConstructorInfo ci = t.GetConstructor(new Type[] { });

  object instance = ci.Invoke(null);

  t.GetMethod(methodName).Invoke(instance, null);

  //object result = t.InvokeMember(methodName, BindingFlags.InvokeMethod, null, instance, null);

}

執行結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM