应用框架的设计与实现——.NET平台(6 自定配置文件节读取类)

本文介绍了一种自定义配置文件的格式及其解析方法,通过XML文件定义模块化配置,并使用.NET框架实现配置文件的读取与解析。

自定格式的配置文件 App.config
 
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    
<configSections>
           <section name="Modules" type="trial.Configuration.ModulesConfiguration, ModulesConfiguration" />
    
</configSections>
    
<Modules>
        
<ModuleGroup Id = "WorkCenter" Name = "控制中心" Image = "img4.ico" Description = "">
            
<Module Id = "Navigator" Name = "导航" Image = "modulehome.bmp" Description = "">
                
<View Assembly = "NavigateUI.exe" Class = "MyNavigateUI.MyNavigateMain"></View>
                
<MainMenu Assembly = "NavigateUI.exe" Class = "MyNavigateUI.MyNavigateMainMenu"></MainMenu>
                
<Toolbar Assembly = "NavigateUI.exe" Class = "MyNavigateUI.Control.MyNavigateToolBar"></Toolbar>
                
<MenuItem MainMenuId = "Navigate" ToolBarButtonId = "Toolbar" File = "Navigator.xml"></MenuItem>
            
</Module>
            
<Module Id = "PSE" Name = "结构器" Image = "module.jpg" Description = "">
                
<View Assembly = "XYZPse.exe" Class = "XYZPse.MainForm.MainForm"></View>
                
<MainMenu Assembly = "XYZPse.exe" Class = "XYZPse.Menu.PseMenu"></MainMenu>
                
<Toolbar Assembly = "XYZPse.exe" Class = "XYZPse.Menu.PseToolBar"></Toolbar>
                
<MenuItem MainMenuId = "PSEMainMenu" ToolBarButtonId = "Toolbar" File = "XYZPse.xml"></MenuItem>
            
</Module>
        
</ModuleGroup>
        
<ModuleGroup Id = "NXZManager" Name = "统管理" Image = "img4.ico" Description = "">
            
<Module Id = "StandardTableManager" Name = "标库管理" Image = "modulesTable.bmp" Description = "">
                
<View Assembly = "StandardTableManager.WinUI.exe" Class = "WinUI.StandardTable.StandTableSee"></View>
                
<MainMenu Assembly = "StandardTableManager.WinUI.exe" Class = "WinUI.StandardTable.SystemMenu.Menu"></MainMenu>
                
<Toolbar Assembly = "StandardTableManager.WinUI.exe" Class = "WinUI.StandardTable.SystemMenu.ToolBar"></Toolbar>
                
<MenuItem MainMenuId = "StandardTableMenu" ToolBarButtonId = "Toolbar" File = "StandardTable.xml"></MenuItem>
            
</Module>
        
</ModuleGroup>
        
<ModuleGroup Id = "SystemManager" Name = "系管理" Image = "img4.ico" Description = "">
            
<Module Id = "WorkflowManager" Name = "流程管理" Image = "module.jpg">
                
<View Assembly = "WorkFlowUI.exe" Class = "WorkFlow.WinUI.ProcessManage.ProcessManageView"></View>
                
<MainMenu Assembly = "WorkFlowUI.exe" Class = "WorkFlow.WinUI.WorkFlowMainMenu"></MainMenu>
                
<Toolbar Assembly = "WorkFlowUI.exe" Class = "WorkFlow.WinUI.WorkFlowToolBar"></Toolbar>
                
<MenuItem MainMenuId = "WorkFlowManager" ToolBarButtonId = "ToolBar" File = "WorkFlow.xml"></MenuItem>
            
</Module>
            
<Module Id = "Organization" Name = "组织管理" Image = "moduleuserAccount.bmp" Description = "">
                
<View Assembly = "XYZ.exe" Class = "XYZ.SystemManage.UserGroupRole"></View>
                
<MainMenu Assembly = "XYZ.exe" Class = "XYZ.SystemMenu.OrganizationMenu"></MainMenu>
                
<Toolbar Assembly = "XYZ.exe" Class = "XYZ.SystemMenu.OrganizationToolBar"></Toolbar>
                
<MenuItem MainMenuId = "Organization" ToolBarButtonId = "Toolbar" File = "Organization.xml"></MenuItem>
            
</Module>
        
</ModuleGroup>
    
</Modules>
</configuration>


自定配置文件节读取类 ModulesConfiguration.cs

using System;
using System.Xml;

namespace trial.Configuration
{
    
/// <summary>
    
/// ModulesConfiguration 的摘要说明。
    
/// </summary>

    public class ModulesConfiguration : System.Configuration.IConfigurationSectionHandler
    
{
        
private ModuleGroupConfiguration[] moduleGroups;

        
public ModuleGroupConfiguration[] ModuleGroups
        
{
            
get
            
{
                
return moduleGroups;
            }

        }


        
/// <summary>
        
/// 
        
/// </summary>
        
/// <param name="parent"></param>
        
/// <param name="configContext"></param>
        
/// <param name="section"></param>
        
/// <returns></returns>

        public object Create(object parent, object configContext, System.Xml.XmlNode section)
        
{
            XmlNodeList groups 
= section.SelectNodes("ModuleGroup");
            moduleGroups 
= new ModuleGroupConfiguration[groups.Count];

            
for (int i=0;i<groups.Count;i++)
            
{
                moduleGroups[i] 
= new ModuleGroupConfiguration(groups[i]);
            }


            
return this;
        }

    }

}


自定配置节信息读取方法

        private void MainForm_Load(object sender, System.EventArgs e)
        
{
            StringBuilder builder 
= new StringBuilder();
            ModulesConfiguration modules 
= (ModulesConfiguration)ConfigurationSettings.GetConfig("Modules");

            
foreach (ModuleGroupConfiguration group in modules.ModuleGroups)
            
{
                
// Group
                builder.Append(" ModuleGroup: ");
                builder.Append(group.Id);
                builder.Append(
" ");
                builder.Append(group.Name);
                builder.Append(
" ");
                builder.Append(group.Image);
                builder.Append(
" ");
                builder.Append(group.Description);

                
foreach (ModuleConfiguration module in group.Modules)
                
{
                    
// Module
                    builder.Append(" Module: ");
                    builder.Append(module.Id);
                    builder.Append(
" ");
                    builder.Append(module.Name);
                    builder.Append(
" ");
                    builder.Append(module.Image);
                    builder.Append(
" ");
                    builder.Append(module.Description);

                    
// View
                    if (module.View != null)
                    
{
                        builder.Append(
" View: ");
                        builder.Append(module.View.Assembly);
                        builder.Append(
" ");
                        builder.Append(module.View.Class);
                    }


                    
// MainMenu
                    if (module.MainMenu != null)
                    
{
                        builder.Append(
" MainMenu: ");
                        builder.Append(module.MainMenu.Assembly);
                        builder.Append(
" ");
                        builder.Append(module.MainMenu.Class);
                    }


                    
// Toolbar
                    if (module.Toolbar != null)
                    
{
                        builder.Append(
" Toolbar: ");
                        builder.Append(module.Toolbar.Assembly);
                        builder.Append(
" ");
                        builder.Append(module.Toolbar.Class);
                    }


                    
// MenuItem
                    if (module.MenuItem != null)
                    
{
                        builder.Append(
" MenuItem: ");
                        builder.Append(module.MenuItem.MainMenuId);
                        builder.Append(
" ");
                        builder.Append(module.MenuItem.ToolBarButtonId);
                        builder.Append(
" ");
                        builder.Append(module.MenuItem.File);
                    }

                }

            }


            
this.richTextBox1.Text = builder.ToString();
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值