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);
}