我們現在已經搭建了外掛程式式的應用程式框架,接下來的工作就是要充實框架的內容,提供基本的服務,也就是service。我想首要的任務就是提供外掛程式的管理服務,我在前面的文章也提到了,要實現動態載入必須要知道外掛程式寄宿在**,哪些要載入,哪些不載入,這些就是這篇文章要討論的問題。
首先解決的就是外掛程式放在什麼地方,我採取的傳統的方法,將外掛程式放到應用程式所在目錄下的制定目錄,我會在應用程式所在的目錄下建立乙個資料夾,命名為plugins。接下來的工作就是要通知哪些外掛程式是要載入的,哪些是不需要載入的,我會將這些資訊放到應用程式的配置檔案中的制定配置塊中,當應用程式執行的時候,就會讀取配置檔案,並根據獲得的資訊載入外掛程式。另外我們的應用程式框架是建立在service基礎之上,所以我需要建立乙個管理外掛程式的service。
我們現在定義乙個外掛程式管理的service介面。
usingsystem;usingsystem.collections.generic;usingsystem.text;namespacepluginframework
}
pluginservice要實現的目標首先是在配置檔案中新增/刪除要載入的外掛程式以及相關的資訊,接下來就是動態的載入外掛程式。我們要定義幾個型別:plugin配置區塊型別,plugin元素型別,plugin元素集合型別,以便我們能夠讀取外掛程式的資訊。
最後我們實現pluginservice:
usingsystem;usingsystem.collections.generic;usingsystem.text;usingsystem.xml;usingsystem.configuration;usingsystem.reflection;usingsystem.windows.forms;usingsystem.io;usingsystem.collections;namespacepluginframework
ipluginservice members#region ipluginservice memberspublicvoidaddplugin(stringpluginname,stringplugintype,stringassembly,stringplugindescription)
publicvoidremoveplugin(stringpluginname)}}
configurationmanager.refreshsection("pluginsection");
}publicstringgetallpluginnames()
return(string)ps.toarray(typeof(string));
}publicboolcontains(stringpluginname)
returnps.contains(pluginname);
}publicboolloadplugin(stringpluginname)
}if(!result)
}catch(exception e)
returnresult;
}publicboolunloadplugin(stringpluginname)
catch(exception e)
returnresult;
}publicvoidloadallplugin()
}catch(exception e)
}set
}publiciplugin getplugininstance(stringpluginname)
returnplugin;
}#endregion}
}
xmlversion="1.0"encoding="utf-8"?><configuration><configsections><sectionname="pluginsection"type="pluginframework.pluginconfigurationsection, pluginframework"/><pluginsection><?xml version="1.0" encoding="utf-8" ?>
構建外掛程式式的應用程式框架 五 管理外掛程式
我們現在已經搭建了外掛程式式的應用程式框架,接下來的工作就是要充實框架的內容,提供基本的服務,也就是service。我想首要的任務就是提供外掛程式的管理服務,我在前面的文章也提到了,要實現動態載入必須要知道外掛程式寄宿在 哪些要載入,哪些不載入,這些就是這篇文章要討論的問題。首先解決的就是外掛程式放...
構建外掛程式式的應用程式框架 通訊機制
前天發了構建外掛程式式的應用程式框架 五 管理外掛程式 這篇文章,有幾個朋友在回覆中希望了解外掛程式之間是如何通訊的。service container service 是我所提到的外掛程式式的應用程式框架的基礎,我們也可以回頭看看 的介面定義 是派生於 iservicecontainer 我把應用...
構建外掛程式式的應用程式框架 七 基本服務
既然做好了框架,我們就希望為某個目標服務,我們要提供一些基本的服務,方便使用者繼續擴充套件他的功能。首先想到的功能就是,選單,工具欄的管理,接下來我們要實現一些更流行的功能,比如停靠工具欄等等。如何實現這些服務呢?我們希望我們的外掛程式在執行時可以獲得應用程式本身的選單,工具條,停靠工具欄等等,然後...