cad.net IExtensionApplication接口的妙用 驚驚
阿新 • • 發佈:2019-05-11
獲得 cte classname inter editor tor 執行 dom 修改
cad提供的 IExtensionApplication 接口 是不能實現一次以上的,那麽這給編寫代碼帶來了一種不好的情況是,每次都要去修改實現這個接口的類,
如果是一個小的測試功能,你又要去動前面的核心,這樣就感覺很蛋疼....
所以我是這麽想的,在實現IExtensionApplication接口的 Initialize 和 Terminate
用反射來反射某個接口(仿IExtensionApplication接口的),然後搜下面接口的 Initialize 和 Terminate,然後運行這個函數.
仿IExtensionApplication接口的接口.
publicinterface IAutoGo { //打開cad的時候會自動執行 void Initialize(); //關閉cad的時候會自動執行 void Terminate(); }
繼承 IExtensionApplication 接口的函數,cad加載這個dll,就會運行它.
public partial class AutoJJBox : IExtensionApplication { //為了解決IExtensionApplication在一個dll內無法多次實現接口的關系//所以在這裏反射加載所有的IAutoGo,以達到能分開寫"啟動運行"函數的目的 //打開cad的時候會自動執行 public void Initialize() { RunIAutoGo("Initialize");//方法名字 } //關閉cad的時候會自動執行 public void Terminate() { RunIAutoGo("Terminate");//方法名字 }private static void RunIAutoGo(string MethodName) { // 通過反射獲取所有繼承了IAutoGo接口的類! // 然後反射實例化,運行它! foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { foreach (Type type in assembly.GetTypes()) { foreach (Type t in type.GetInterfaces())//獲得它的接口集合 { if (t.Name == "IAutoGo")//找到接口的函數 { //再找裏面的Initialize foreach (MemberInfo item in type.GetMembers())//獲得它的成員(函數 方法)的信息集合 { if (item.Name == MethodName) { try { string className = item.ReflectedType.FullName; //類名 string namePace = Assembly.GetExecutingAssembly().ToString(); Type ty = Assembly.Load(namePace).GetType(className); MethodInfo method = ty.GetMethod(MethodName); if (method.IsStatic)//判斷是否靜態方法,不是就要實例化 method.Invoke(null, null); else { //調用實例化方法(非靜態方法)需要創建類型的一個實例 object instanceObject = Activator.CreateInstance(ty); object returnValue1 = method.Invoke(instanceObject, null); //運行所有的 IAutoGo的Initialize!! } } catch (System.Exception E) { throw E; } break; } } } } } } } }
封存上面的,之後也不用動了....
任何需要實現啟動運行的函數,都去實現 : IAutoGo
public class AutoGo : IAutoGo { public void Initialize() { Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;//命令欄交互 ed.WriteMessage("驚驚博客是 https://www.cnblogs.com/JJBox/ "); } public void Terminate() { } }
cad.net IExtensionApplication接口的妙用 驚驚