




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
publicpartialclassMainForm:Form,IApplication{〃用??.Net框"°架"1提-P供?的1?ServiceContainer類(lèi)3P來(lái)口何實(shí)咁現(xiàn)?IServiceContainer接逾口privateServiceContainerserviceContainer=newServiceContainer();privatePluginServicepluginService;publicMainForm(){InitializeComponent();pluginService=newPluginService(this);serviceContainer.AddService(typeof(IPluginService),pluginService);}#regionIApplicationMembers
publicToolStripPanelLeftToolPanel{get{returnleftPanel;}}publicToolStripPanelRightToolPanel{get{returnrightPanel;}}publicToolStripPanelTopToolPanel{get{returntopPanel;}}publicToolStripPanelBottomToolPanel{get{returnbottomPanel;}}publicStatusStripStatusBar{get{returnstatusStrip;}}publicMenuStripMainMenuStrip{get{returnmainMenuStrip;}}#endregion#regionIServiceContainerMemberspublicvoidAddService(TypeserviceType,System.ComponentModel.Design.ServiceCreatorCallbackcallback,boolpromote){serviceContainer.AddService(serviceType,callback,promote);}publicvoidAddService(TypeserviceType,System.ComponentModel.Design.ServiceCreatorCallbackcallback){serviceContainer.AddService(serviceType,callback);}publicvoidAddService(TypeserviceType,objectserviceInstance,boolpromote){serviceContainer.AddService(serviceType,serviceInstance,promote);}publicvoidAddService(TypeserviceType,objectserviceInstance){serviceContainer.AddService(serviceType,serviceInstance);}publicvoidRemoveService(TypeserviceType,boolpromote){serviceContainer.RemoveService(serviceType,promote);}publicvoidRemoveService(TypeserviceType){serviceContainer.RemoveService(serviceType);}#endregion#regionIServiceProviderMembers〃由釦于?些05類(lèi)!口型“11本A?身T間?接"血的1?繼J承D了竝IServiceProvider接逾口?6?所-以。?我"。們?要°a覆2蓋?掉1?Form本A?身l"a的1?實(shí)咁現(xiàn)?〃所以。?我"°們?使°1用??了竝new關(guān)?鍵t字A?publicnewobjectGetService(TypeserviceType){returnserviceContainer.GetService(serviceType);}#endregionprivatevoidMainForm_Load(objectsender,EventArgse){pluginService.LoadAllPlugin();}privatevoidpluginManagementToolStripMenuItem1_Click(objectsender,EventArgse){PluginManagementFormpmf=newPluginManagementForm(this);pmf.ShowDialog();}}管理publicpartialclassPluginManagementForm:Form{privateIApplicationapplication=null;publicPluginManagementForm(IApplicationapplication){InitializeComponent();this.application=application;}privatevoidPluginManagementForm_Load(objectsender,EventArgse){StringpluginPath=Path.GetDirectoryName(Application.ExecutablePath)+"\\Plugin";DirectoryInfodi=newDirectoryInfo(pluginPath);if(!di.Exists){di.Create();}FileInfo[]plugins=di.GetFiles("*.dll");listView1.Items.Clear();foreach(FileInfoplugininplugins){FindPluginFromAssembly(plugin);}CheckExistedPlugin();}privatevoidFindPluginFromAssembly(FileInfofile){Assemblyassembly=System.Reflection.Assembly.LoadFile(file.FullName);Type[]types=assembly.GetTypes();foreach(Typetypeintypes){if(type.GetInterface("IPlugin")!=null){ListViewItemlvi=newListViewItem(type.Name);lvi.SubItems.Add(type.FullName);lvi.SubItems.Add(file.Name);DescriptionAttributeda=(DescriptionAttribute)(TypeDescriptor.GetAttributes(type)[typeof(DescriptionAttribute)]);lvi.SubItems.Add(da.Description);listView1.Items.Add(lvi);}}}privatevoidCheckExistedPlugin(){IPluginServicepluginService=(IPluginService)application.GetService(typeof(IPluginService));if(pluginService!=null){List<String>nameList=newList<string>();String[]pluginNames=pluginService.GetAllPluginNames();nameList.AddRange(pluginNames);foreach(ListViewItemiteminlistView1.Items){if(nameList.Contains(item.Text)){item.Checked=true;}}}}privatevoidbutton2_Click(objectsender,EventArgse){Close();}privatevoidbutton1_Click(objectsender,EventArgse){IPluginServicepluginService=(IPluginService)application.GetService(typeof(IPluginService));if(pluginService!=null){List<String>nameList=newList<string>();String[]pluginNames=pluginService.GetAllPluginNames();nameList.AddRange(pluginNames);foreach(ListViewItemiteminlistView1.Items){if(!item.Checked){if(nameList.Contains(item.Text)){pluginService.UnLoadPlugin(item.Text);pluginService.RemovePlugin(item.Text);}else{continue;}}else{if(nameList.Contains(item.Text)){continue;}else{pluginService.AddPlugin(item.Text,item.SubItems[1].Text,item.SubItems[2].Text,item.SubItems[3].Text);pluginService.LoadPlugin(item.Text);}}}}this.Close();}}Iapplicati接□:publicinterfaceIApplication:IServiceContainer{ToolStripPanelLeftToolPanel{get;}ToolStripPanelRightToolPanel{get;}ToolStripPanelTopToolPanel{get;}ToolStripPanelBottomToolPanel{get;}MenuStripMainMenuStrip{get;}StatusStripStatusBar{get;}}publicinterfaceIPlugin{IApplicationApplication{get;set;}StringName{get;set;}StringDescription{get;set;}voidLoad();voidUnLoad();eventEventHandler<EventArgs>Loading;}publicinterfaceIPluginService{IApplicationApplication{get;set;}voidAddPlugin(StringpluginName,StringpluginType,StringAssembly,StringpluginDescription);voidRemovePlugin(StringpluginName);String[]GetAllPluginNames();BooleanContains(StringpluginName);BooleanLoadPlugin(StringpluginName);BooleanUnLoadPlugin(StringpluginName);IPluginGetPluginInstance(StringpluginName);voidLoadAllPlugin();}publicclassPluginConfigurationCollection:ConfigurationElementCollection{publicPluginConfigurationCollection(){}protectedoverridevoidBaseAdd(ConfigurationElementelement){BaseAdd(element,false);}publicvoidRemove(PluginConfigurationElementpluginElement){if(BaseIndexOf(pluginElement)>=0)BaseRemove(pluginElement.Name);}publicvoidRemoveAt(intindex){BaseRemoveAt(index);}publicvoidRemove(stringname){BaseRemove(name);}publicvoidClear(){BaseClear();}publicvoidAdd(PluginConfigurationElementpluginElement){BaseAdd(pluginElement);}publicintIndexOf(PluginConfigurationElementpluginElement){returnBaseIndexOf(pluginElement);}newpublicPluginConfigurationElementthis[stringName]{get{return(PluginConfigurationElement)BaseGet(Name);}}publicPluginConfigurationElementthis[intindex]{get{return(PluginConfigurationElement)BaseGet(index);}set{if(BaseGet(index)!=null){BaseRemoveAt(index);}BaseAdd(index,value);}}publicnewintCount{get{returnbase.Count;}}publicnewstringRemoveElementName{get{returnbase.RemoveElementName;}}publicnewstringClearElementName{get{returnbase.ClearElementName;}set{base.AddElementName=value;}}publicnewstringAddElementName{get{returnbase.AddElementName;}set{base.AddElementName=value;}}protectedoverrideObjectGetElementKey(ConfigurationElementelement){return((PluginConfigurationElement)element).Name;}protectedoverrideConfigurationElementCreateNewElement(){returnnewPluginConfigurationElement();}publicoverrideConfigurationElementCollectionTypeCollectionType{get{returnConfigurationElementCollectionType.AddRemoveClearMap;}}}publicclassPluginConfigurationElement:ConfigurationElement{publicPluginConfigurationElement(){}[ConfigurationProperty("Name")]publicStringName{get{return(String)this["Name"];}set{this["Name"]=value;}[ConfigurationProperty("Type")]publicStringType{get{return(String)this["Type"];}set{this["Type"]=value;}}[ConfigurationProperty("Assembly")]publicStringAssembly{get{return(String)this["Assembly"];}set{this["Assembly"]=value;}}[ConfigurationProperty("Description")]publicStringDescription{get{return(String)this["Description"];}set{this["Description"]=value;}}}publicclassPluginConfigurationSection:ConfigurationSection{publicPluginConfigurationSection(){}[ConfigurationProperty("",IsDefaultCollection=true)]publicPluginConfigurationCollectionPluginCollection{get{return(PluginConfigurationCollection)base[""];}}}publicclassPluginService:IPluginService{privateIApplicationapplication=null;privatePluginConfigurationSectionconfig=null;privateDictionary<String,IPlugin>plugins=newDictionary<string,IPlugin>();privateXmlDocumentdoc=newXmlDocument();publicPluginService(){}publicPluginService(IApplicationapplication){this.application=application;}#regionIPluginServiceMemberspublicvoidAddPlugin(stringpluginName,stringpluginType,stringassembly,stringpluginDescription){doc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);XmlNodepluginNode=doc.SelectSingleNode("/configuration/PluginSection");XmlElementele=doc.CreateElement("add");XmlAttributeattr=doc.CreateAttribute("Name");attr.Value=pluginName;ele.SetAttributeNode(attr);XmlAttributeattrType=doc.CreateAttribute("Type");attrType.Value=pluginType;ele.SetAttributeNode(attrType);XmlAttributeattrAss=doc.CreateAttribute("Assembly");attrAss.Value=assembly;ele.SetAttributeNode(attrAss);XmlAttributeattrDes=doc.CreateAttribute("Description");attrDes.Value=pluginDescription;ele.SetAttributeNode(attrDes);pluginNode.AppendChild(ele);doc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);ConfigurationManager.RefreshSection("PluginSection");}publicvoidRemovePlugin(stringpluginName){doc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);XmlNodenode=doc.SelectSingleNode("/configuration/PluginSection");foreach(XmlNodeninnode.ChildNodes){if(n.Attributes!=null){if(n.Attributes[0].Value==pluginName){node.RemoveChild(n);}}}doc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);ConfigurationManager.RefreshSection("PluginSection");}publicstring[]GetAllPluginNames(){config=(PluginConfigurationSection)ConfigurationManager.GetSection("PluginSection");PluginConfigurationElementpe=newPluginConfigurationElement();ArrayListps=newArrayList();for(Int32i=0;i<config.PluginCollection.Count;i++){pe=config.PluginCollection[i];ps.Add(pe.Name);}return(String[])ps.ToArray(typeof(String));}publicboolContains(stringpluginName){config=(PluginConfigurationSection)ConfigurationManager.GetSection("PluginSection");PluginConfigurationElementpe=newPluginConfigurationElement();List<String>ps=newList<string>();for(Int32i=0;i<config.PluginCollection.Count;i++){pe=config.PluginCollection[i];ps.Add(pe.Name);}returnps.Contains(pluginName);}publicboolLoadPlugin(stringpluginName){Booleanresult=false;config=(PluginConfigurationSection)ConfigurationManager.GetSection("PluginSection");PluginConfigurationElementpe=newPluginConfigurationElement();Stringpath=Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath)+"\\Plugin";try{for(Int32i=0;i<config.PluginCollection.Count;i++){pe=config.PluginCollection[i];if(pe.Name==pluginName){Assemblyassembly=Assembly.LoadFile(path+"\\"+pe.Assembly);Typetype=assembly.GetType(pe.Type);IPlugininstance=(IPlugin)Activator.CreateInstance(type);instance.Application=application;instance.Load();plugins[pluginName]=instance;result=true;break;}}if(!result){MessageBox.Show("NotFoundthePlugin");}}catch(Exceptione){MessageBox.Show(e.Message);result=false;}returnresult;}publicboolUnLoadPlugin(stringpluginName){Booleanresult=false;try{IPluginplugin=GetPluginInstance(pluginName);plugin.UnLoad();result=true;catch(Exceptione){MessageBox.Show(e.Message);}returnresult;}publicvoidLoadAllPlugin(){PluginConfigurationElementpe=newPluginConfigurationElement();config=(PluginConfigurationSection)ConfigurationManager.GetSection("PluginSection");Stringpath=Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath)+"\\Plugin";try{for(Int32i=0;i<config.PluginCollection.Count;i++){pe=config.PluginCollection[i];Assemblyassembly=Assembly.LoadFile(path+"\\"+pe.Assembly);Typetype=assembly.GetType(pe.Type);IPlugininstance=(IPlugin)Activator.CreateInstance(type);instance.Application=application;instance.Load();plugins[pe.Name]=instance;}}catch(Exceptione){MessageBox.Show(e.Message);}}publicIApplicationApplication{get{returnapplication;}set{application=value;}}publicIPluginGetPluginInstance(stringpluginName){IPluginplugin=null;if(plugins.ContainsKey(pluginName)){plugin=plugins[pluginName];}returnplugin;}#endregion}[Description("Thisismyfirstplugin!")]publicclassFi
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 負(fù)壓設(shè)備行業(yè)月個(gè)人工作計(jì)劃
- 班級(jí)科技參與與實(shí)踐計(jì)劃
- 《柔性可穿戴傳感技術(shù)》課程教學(xué)大綱
- 學(xué)期總結(jié)與反思計(jì)劃
- 個(gè)人社區(qū)貢獻(xiàn)的評(píng)估標(biāo)準(zhǔn)計(jì)劃
- 搭建員工意見(jiàn)反饋渠道的方案計(jì)劃
- 推動(dòng)企業(yè)信息化進(jìn)程計(jì)劃
- 第四章籃球-原地雙手胸前傳球 教學(xué)設(shè)計(jì)
- 2024年高中物理新教材選擇性必修第一冊(cè) 第2章 章末檢測(cè)試卷(二)
- 提高美術(shù)教學(xué)全面素質(zhì)教育的工作計(jì)劃
- NB/T 10755-2021煤礦在用架空乘人裝置定期安全檢測(cè)檢驗(yàn)規(guī)范
- 平面設(shè)計(jì)需求表、流程表
- GB/T 15166.4-2021高壓交流熔斷器第4部分:并聯(lián)電容器外保護(hù)用熔斷器
- 11471勞動(dòng)爭(zhēng)議處理(第8章)
- 《鐵杵成針》教學(xué)課件
- 養(yǎng)老護(hù)理技術(shù)操作規(guī)范評(píng)分標(biāo)準(zhǔn)
- 中國(guó)文化概論-緒論
- 網(wǎng)頁(yè)設(shè)計(jì)基礎(chǔ)ppt課件(完整版)
- 2023高中物理步步高大一輪 第十章 專(zhuān)題強(qiáng)化十八 帶電粒子在有界勻強(qiáng)磁場(chǎng)中的運(yùn)動(dòng)
- 供應(yīng)商管理控制流程圖
- 小學(xué)四年級(jí)《雞兔同籠》優(yōu)秀獲獎(jiǎng)公開(kāi)課分析
評(píng)論
0/150
提交評(píng)論