前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >建立可扩展的silverlight 应用框架 step-4

建立可扩展的silverlight 应用框架 step-4

作者头像
用户1172164
发布2018-01-16 11:44:22
6580
发布2018-01-16 11:44:22
举报

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

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

我的目的是,在左侧的导航栏目里点击按钮,相应的右侧的主体部分显示不同的内容。这些内容都是来自外部加载进来的xap文件。我可以上传管理自己的xap文件。 这里来看一下我的整理过程 首先将布局划分为两个部分:“LeftNavRegion”、“MainRegion”,一个来承放导航,一个来承放主体内容。 接下来就要加载相关的Module了。

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

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

1.手动加载Module

例:

protected override IModuleCatalog GetModuleCatalog()
{
    ModuleCatalog catalog = new ModuleCatalog()
    .AddModule(typeof(OperatingTableTestModule.HelloPrismModule))
    .AddModule(typeof(OTLeftNavModule.OTLeftNavModule));

    return catalog;
}

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

例:

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

再说一下我需要的,我想通过自己上传xap文件动态的来管理。这里我发现配置文件都是在xap文件内部的。不过在可以直接传入一个配置文件的流来进行实例化。 这里我改造了一下项目,在sl应用刚刚启动的时候就去外部加载这个配置文件,在取到了流以后,把流赋值给Bootstrapper

private void Application_Startup(object sender, StartupEventArgs e)
{
    bootstrapper = new Bootstrapper();
    //去外部加载配置文件
    var uri = new Uri(HtmlPage.Document.DocumentUri, "ModulesCatalog.xaml");
    WebClient wb = new WebClient();
    wb.OpenReadCompleted += new OpenReadCompletedEventHandler(wb_OpenReadCompleted);
    wb.OpenReadAsync(uri);
}

void wb_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    if (e.Error == null)
    {
        bootstrapper.ModulesCatalogStream = e.Result;
        bootstrapper.Run();
    }
}

配置文件“ModulesCatalog.xaml”:

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2010-02-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档