在我们的silverlight项目中,是被打包为xap zip文件下载到客户端,所以silverlight中的app配置文件我们不能直接修改,而在其宿主web host中的web.config在服务端我们也不能直接访问。在我们的项目中遇见了这个问题所以我就有了此博客。
先说明解决这个问题的方案有:
1:调用wcf,webservice,Asp.net页面等服务端数据源,异步显示在我们的UI。
2:利用silverlight项目的宿主页面 object,传入初始化参数,在silverlight app中获取。
上面的方案都是针对于我们的少量有限配置信息的获取。我这里做的是利用在服务端的xml配置文件来模拟配置文件(为什么不用web.config?以为存在权限信息的问题,所以我觉得尽量避免此文件信息暴露)。在silverlight的异步加载xml文档并解析xml文档。形成配置信息。
为了全局使用,早些加载xml文档,我们需要在app中加一句:
SLConfigManager.Current.ConfigPath = "../SlConfig.xml";//配置文件的路径,相对于我们的xap文件路径。
我们先看一下测试xml:
< Configuration >
< appSettings >
< add key ="test1" value ="123" ></ add >
< add key ="test2" value ="1" ></ add >
</ appSettings >
< Class ClassID ="111" >
< Student Age ="123" >
< Name > ddddd </ Name >
</ Student >
< Student Age ="28" >
< Name > 111 </ Name >
</ Student >
</ Class >
</ Configuration >
这是我们可以使用:
{
MessageBox.Show(SLConfigManager.Current.GetSection < Class > ( " Class " ).ClassID + "" );
MessageBox.Show(SLConfigManager.Current.GetAppSettings( " test1 " ).ToString());
MessageBox.Show(SLConfigManager.Current.GetAppSettings < Sex > ( " test2 " ).ToString());
}
public enum Sex
{
man,woman
}
在这里我们模拟了AppSettings,和Section(注:这里的section,不需要预申明,在利用xml转化形成的,更利于我们的配置扩展性,使用到了XmlRoot,XmlElement等attribute),在看看我们的Class类:
namespace SilverlightApplication2
{
[XmlRoot( " Student " )]
public class Student
{
[XmlElement( " Name " )]
public string Name
{ get ; set ; }
[XmlAttribute( " Age " )]
public int Age
{
get ;
set ;
}
}
[XmlRoot( " Class " )]
public class Class
{
[XmlAttribute( " ClassID " )]
public int ClassID
{
get ;
set ;
}
[XmlArray()]
[XmlArrayItem( " Students " )]
public System.Collections.Generic.List < Student > Students
{
get ;
set ;
}
}
}
最后需要说明的是:在于我们的项目中可能存在xml文件还没有加载,的情况,所以加入了时间支持和IsLoaded属性标示。
源码:
最后附:测试程序打包下载
本文转自破狼博客园博客,原文链接:http://www.cnblogs.com/whitewolf/archive/2011/07/06/SlConfig.html,如需转载请自行联系原作者