专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Flash教程 » silverlight应用:使用SilverLight构建插件式应用程序(一) »正文

silverlight应用:使用SilverLight构建插件式应用程序(一)

来源: 发布时间:星期五, 2009年1月23日 浏览:8次 评论:0
  使用SilverLight构建应用()

  本文源代码下载地址:

  http://flashview.ddvip.com/2008_10/windcloud.rar

  SilverLight是MS推出构建RIA应用利器由于我对Web图形方面比较感兴趣对SVG也了解所以从SilverLight1.0推出是有我就直看着方面东西到Beta2时候我想要很多东西基本都有了就萌生个想法用这个来做点东西那就是构建个插件模式RIA应用

  看了这么久先说说我对SilverLight最不满意几个地方:

  1.     SilverLight还没有实现对摄像头和语音支持以及没有3D方面支持真是让我非常不爽这个是对比Flash来说

  2.     SilverLightControl控件样式说真默认如何会这么难看.Orz;

  3.     SilverLight全屏抗锯齿问题不知道MS人如何想文字大时候还不错可是文字什么都看不清顺便问能够显示文字时候把这个功能关掉吗?

  我写这个所有经验都来自网络也引用了些网络资源在此我很感激

  1.     是以插件框架构建每个功能都使用插件模式处理;

  2.     目前实现了在3D地球上显示城市坐标并可以显示天气;

  3.     使用Liver Search引擎搜索结果;

  4.     发布本地软件Software;

  5.     我想实现还很多正好看看有没有人对这个感兴趣可以起做

  整个解决方案有9个项目构成

使用SilverLight构建插件式应用<img src='/icons/72290chengxu.gif' />(<img src='/icons/72290yi.gif' />)

  其中WindCloud.Web是Web项目使用.net2.0(没办法空间只支持2.0); WindCloud.Main是整个项目也是插件宿主个SilverLight应用;WindCloud.PubUnit是公共比如窗口啊翻页啊或者媒体播放等等大家都会用到就放这个里边了WindCloud.Weather是天气插件WindCloud.Search是搜索插件WindCloud.Soft是我本来网站WebSite介绍我自己软件Software个插件其他几个都是插件只是还没有实现看名字都知道了这些所有插件项目类型都是SilverLight类库

  最终效果如下:

使用SilverLight构建插件式应用<img src='/icons/72290chengxu.gif' />(<img src='/icons/72290yi.gif' />)

  重点:

  Q:如何构建宿主

  A:任意建立个SilverLight应用都可以当成宿主

  Q:如果构建插件?

  A:任意构建个SilverLight类库都是个插件只不过为了显示在界面上我们会在每个插件里面UserControl来做界面

  使用WebClient下载插件的后使用反射加载插件具体看代码和介绍说明注释:

  首先我们创建个XML配置文件来保存插件信息如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <assembly xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <filename>WindCloud.Weather.dll</filename>
    <version>0.0.2</version>
    <layout>grid:1,1,1,1</layout>
    <titlename>Globe Weather</titlename>
    <imagename>Weather.png</imagename>
    <typename>WindCloud.Weather.PageGlobe</typename>
    <description></description>
  </assembly> 
</configuration>


  Filename:插件文件名称;

  Version:插件版本这个很重要每次系统启动的后都会读取服务配置文件根据版本是否相同来判断插件是否需要更新如果需要更新就下载到客户端;

  Layout:布局方式;

  Typename:很重要类型名称用来反射时候使用

  在主项目建立个实体对象描述插件信息:

public PluginConf
  {
    public filename { get; ; }
    public version { get; ; }
    public layout { get; ; }
    public titlename { get; ; }
    public imagename { get; ; }
    public typename { get; ; }
    public description { get; ; }
}


  至此准备工作完成下边开始进入流程:

  项目启动时候下载配置文件信息:

  //获取升级配置文件检测是否需要下载新插件文件

      WebClient wcPlugin = WebClient;
       (wcPlugin.IsBusy)
      {
        wcPlugin.CancelAsync;
      }
      wcPlugin.OpenReadCompleted OpenReadCompletedEventHandler(wcPlugin_OpenReadCompleted);
      wcPlugin.OpenReadAsync( Uri(PublicUnit.PluginConfigFile, UriKind.Relative));
void wcPlugin_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {


  //获取服务器升级文件

      Stream d = e.Result as Stream;
      XElement xmlServer = XElement.Load(.Xml.XmlReader.Create(e.Result));
      //定义查询思路方法
      IEnumerable<PluginConf> pluginConfsServer = from c in xmlServer.DescendantsAndSelf("assembly")
                            select PluginConf
            {
              description = c.Elements("description").SingleOrDefault.Value,
              filename = c.Elements("filename").SingleOrDefault.Value,
              layout = c.Elements("layout").SingleOrDefault.Value,
              imagename = c.Elements("imagename").SingleOrDefault.Value,
              titlename = c.Elements("titlename").SingleOrDefault.Value,
              typename = c.Elements("typename").SingleOrDefault.Value,
              version = c.Elements("version").SingleOrDefault.Value          
            };
}




  至此把服务器端配置文件加载到了本地



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: