zoukankan      html  css  js  c++  java
  • 建立可扩展的silverlight应用框架 step4

    通过外部配置文件加载模块module

    在上一节中为项目引入了“Prism”框架,并建立了一个Hello Prism做测试。这里要把项 目好好的整理一下。使其更加的合理和具有可扩展性。

    我的目的是,在左侧的导航栏目里点击按钮,相应的右侧的主体部分显示不同的内容。这 些内容都是来自外部加载进来的xap文件。我可以上传管理自己的xap文件。

    这里来看一下我的整理过程

    首先将布局划分为两个部分:“LeftNavRegion”、“MainRegion”,一个来承放导航, 一个来承放主体内容。

    接下来就要加载相关的Module了。

    关于Module的加载,园子里的包包同学已经对他做了很详细的分析。具体请看《Prism研 究(for WPF & Silverlight)5.Module研究》

    在看完了他的文章后,了解到加载Module有两种方法:

    1.手动加载Module

    例:

    1 protected override IModuleCatalog GetModuleCatalog()
    2 {
    3      ModuleCatalog catalog = new ModuleCatalog()
    4      .AddModule(typeof(OperatingTableTestModule.HelloPrismModule))
    5      .AddModule(typeof(OTLeftNavModule.OTLeftNavModule));
    6
    7     return  catalog;
    8 }

    2.根据配置文件动态加载Module

    例:

    1 protected override IModuleCatalog GetModuleCatalog()
    2 {
    3      return ModuleCatalog.CreateFromXaml(new Uri ("/OperatingTable;component/ModulesCatalog.xaml", UriKind.Relative));
    4 }

    再说一下我需要的,我想通过自己上传xap文件动态的来管理。这里我发现配置文件都是 在xap文件内部的。不过在可以直接传入一个配置文件的流来进行实例化。

    这里我改造了一下项目,在sl应用刚刚启动的时候就去外部加载这个配置文件,在取到了 流以后,把流赋值给Bootstrapper

    01 private void Application_Startup(object sender, StartupEventArgs  e)
    02 {
    03     bootstrapper = new Bootstrapper();
    04      //去外部加载配置文件 
    05     var uri = new Uri (HtmlPage.Document.DocumentUri, "ModulesCatalog.xaml");
    06     WebClient  wb = new WebClient();
    07     wb.OpenReadCompleted += new  OpenReadCompletedEventHandler(wb_OpenReadCompleted);
    08      wb.OpenReadAsync(uri);
    09 }
    10
    11 void wb_OpenReadCompleted(object  sender, OpenReadCompletedEventArgs e)
    12 {
    13     if (e.Error ==  null)
    14     {
    15         bootstrapper.ModulesCatalogStream  = e.Result;
    16         bootstrapper.Run();
    17     }
    18  }

    配置文件“ModulesCatalog.xaml”:

    1 <Modularity:ModuleCatalog  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    2                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    3                  xmlns:sys="clr- namespace:System;assembly=mscorlib"
    4                 xmlns:Modularity="clr- namespace:Microsoft.Practices.Composite.Modularity;assembly=Microsoft.Practices.C omposite">
    5   <Modularity:ModuleInfo  Ref="OperatingTableTestModule.xap" ModuleName="OperatingTableTestModule"  ModuleType="OperatingTableTestModule.HelloPrismModule, OperatingTableTestModule,  Version=1.0.0.0" />
    6   <Modularity:ModuleInfo  Ref="OTLeftNavModule.xap" ModuleName="OTLeftNavModule"  ModuleType="OTLeftNavModule.OTLeftNavModule, OTLeftNavModule, Version=1.0.0.0"  />
    7   <Modularity:ModuleInfo Ref="OTWelcomeModule.xap"  ModuleName="OTWelcomeModule" ModuleType="OTWelcomeModule.OTWelcomeModule,  OTWelcomeModule, Version=1.0.0.0" InitializationMode="OnDemand" />
    8  </Modularity:ModuleCatalog>

    这里就可以自己做上一套asp.net程序来上传xap文件并且生成配置文件 “ModulesCatalog.xaml”来供给Prism SL应该来读取了。

    附上现在项目的截图

    Powered By D&J (URL:http://www.cnblogs.com/Areas/)
  • 相关阅读:
    慈不掌兵,义不行贾,烂好人难成大业!
    克服焦虑
    静态路由汇总(路由聚合)
    OSPF协议介绍及配置 (下)
    OSPF协议介绍及配置 (上)
    我为什么鼓励工程师写blog
    佛弟子有三样东西需要永远保密
    【交换机在江湖】第十三章 VLAN划分篇
    FileZilla Server ftp 服务器下通过alias别名设置虚拟目录(多个分区)
    Java 对象和类
  • 原文地址:https://www.cnblogs.com/Areas/p/2169766.html
Copyright © 2011-2022 走看看