zoukankan      html  css  js  c++  java
  • 使用SilverLight构建插件式应用程序(一)

    使用SilverLight构建应用程序(一)

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

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

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

    2.         SilverLight控件的样式,说真的,默认的怎么会这么难看.Orz

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

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

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

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

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

    4.         程序发布本地的软件;

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

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

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

     最终效果如下:

     

    重点:

    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 class PluginConf

        {

            public string filename { get; set; }

            public string version { get; set; }

            public string layout { get; set; }

            public string titlename { get; set; }

            public string imagename { get; set; }

            public string typename { get; set; }

            public string description { get; set; }

    }

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

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

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

                WebClient wcPlugin = new WebClient();

                if (wcPlugin.IsBusy)

                {

                    wcPlugin.CancelAsync();

                }

                wcPlugin.OpenReadCompleted += new OpenReadCompletedEventHandler(wcPlugin_OpenReadCompleted);

                wcPlugin.OpenReadAsync(new Uri(PublicUnit.PluginConfigFile, UriKind.Relative));

    void wcPlugin_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)

            {

     

    //获取服务器的升级文件

                Stream d = e.Result as Stream;

                XElement xmlServer = XElement.Load(System.Xml.XmlReader.Create(e.Result));

                //定义查询方法

                IEnumerable<PluginConf> pluginConfsServer = from c in xmlServer.DescendantsAndSelf("assembly")

                                                            select new 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                    

                            };

    }

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

         源代码下载 http://www.prolightsoft.com/windcloud.rar

    精彩内容:稍后继续

  • 相关阅读:
    列表 ,表格与媒体元素基础
    HTML5基础知识
    解析
    字符串
    类和对象
    [leetcode]605. Can Place Flowers能放花吗
    [leetcode]432. All O`one Data Structure全O(1)数据结构
    [leetcode]68. Text Justification文字对齐
    [leetcode]149. Max Points on a Line多点共线
    [leetcode]272. Closest Binary Search Tree Value II二叉搜索树中最近的值II
  • 原文地址:https://www.cnblogs.com/songsgroup/p/1265532.html
Copyright © 2011-2022 走看看