首页 > 编程语言 >Silverlight应用程序扩展服务

Silverlight应用程序扩展服务

时间:2023-07-02 11:08:34浏览次数:47  
标签:Silverlight IApplicationLifetimeAware 服务 扩展 应用程序 Application 注册 方法


 

使用应用程序扩展服务可以扩展 Silverlight 应用程序模型。通常使用扩展服务来封装特定功能域中由多个应用程序使用的功能。例如,可以使用扩展服务来实现专用媒体处理或自定义数据访问层。

Application 类提供多数应用程序共用的服务。有关更多信息,请参见应用程序服务。可以通过创建自定义 Application 子类来提供附加服务,但这可能会带来不必要的复杂性。例如,创建子类将要求应用程序派生自您的子类,这会妨碍同时使用多个扩展框架。

取代创建自定义 Application 子类的方法是通过 Application..::.ApplicationLifetimeObjects 属性添加应用程序扩展服务。这使您能够组合多个服务并实现复杂的服务依赖项。

应用程序扩展服务必须实现 IApplicationService 接口。此接口对服务初始化和清除提供支持。如果服务需要与应用程序生存期事件进行更深入的集成,则还可以实现 IApplicationLifetimeAware 接口。

本主题包含以下各节:

  注册扩展服务

通过将应用程序扩展服务添加到 Application..::.ApplicationLifetimeObjects 列表可以注册这些服务。可以在应用程序 XAML 或程序代码中(或者同时使用)完成此操作。

服务以您指定的顺序进行注册。这使您能够创建对之前注册的服务具有依赖项的服务。

必须在应用程序构造函数中执行服务注册。如果在应用程序 XAML 中指定服务,则会在构造函数加载 XAML 时,通过调用生成的 InitializeComponent 方法注册这些服务。

下面的代码示例演示如何在 App.xaml 文件中注册两个服务。此代码假定您已定义一个名为 svc 的 XML 命名空间,该命名空间引用包含服务类的命名空间和程序集。

复制代码



下面的代码示例演示如何使用应用程序构造函数中的程序代码注册相同的服务。

[C#]

复制代码


this.ApplicationLifetimeObjects.Add(    new SilverlightApplicationService.ApplicationService1());
this.ApplicationLifetimeObjects.Add(
    new SilverlightApplicationService.ApplicationService2());


您的服务类可以实现可在 XAML 中设置或在服务构造函数中初始化的属性。默认构造函数是使用 XAML 注册服务所必需的。因此,如果实现带有参数的构造函数,则还应显式实现无参数构造函数。

  从应用程序代码访问扩展服务

可以从 ApplicationLifetimeObjects 列表检索已注册的服务对象。但是,此列表要求使用整数索引,而当您添加、移除或重新排序服务时,特定服务的索引将发生更改。因此,应在您的服务实现中提供其他访问形式。

一种非常方便的模式是对服务类实现一个静态 Current 属性。可以在服务初始化代码中设置此属性。这使得更易于在要注册的任何附加服务的应用程序代码和初始化代码中访问实例。

下面的代码示例演示如何通过 Current 属性访问服务实例,然后访问该服务的一个实例属性。

[C#]

复制代码


ApplicationService1 service1 = ApplicationService1.Current;String param1 = service1.InitParams["param1"];


下节包含实现和初始化这些属性的代码示例。

  实现 IApplicationService 接口

Silverlight 应用程序扩展服务必须实现 IApplicationService 接口。此接口定义两个方法:StartServiceStopService

通常实现 StartService 方法来初始化服务并获取所有必需的非托管资源。

Application..::.Startup 事件之前,应用程序会按服务的注册顺序为每个服务调用 StartService 方法。这使每个服务都可用于在注册顺序中位于其后的各服务的 StartService 方法。此外,所有服务都可供 Startup 事件处理程序使用。

StartService 方法具有类型为 ApplicationServiceContext 的单个参数。此类型公开 ApplicationInitParams 属性,提供对宿主 HTML 中指定的 InitParams 值的访问。

下面的代码示例演示 StartService 方法的实现,该实现初始化一个静态 Current 属性,并将初始化参数存储到一个实例属性中。

[C#]

复制代码


public static ApplicationService1 Current { get; set; }private Dictionary  
  
   InitParams { get; set; }

public void StartService(ApplicationServiceContext context)
{
    Current = this;
    InitParams = context.ApplicationInitParams;
}


通常实现 StopService 方法来关闭应用程序并释放所有非托管资源。

Application..::.Exit 事件之后,应用程序会按注册服务的相反顺序为每个服务调用 StopService 方法。所有服务仍可供应用程序的 Exit 事件处理程序使用。此外,每个 StopService 方法仍可访问在注册顺序中位于其前的所有服务。

  实现 IApplicationLifetimeAware 接口

IApplicationLifetimeAware 接口继承 IApplicationService 接口,并定义用于处理以下四个附加应用程序生存期事件的方法:

顾名思义,这些方法在紧接应用程序的 StartupExit 事件之前和之后调用。

通常为对其他服务或应用程序代码具有复杂依赖项的服务实现 IApplicationLifetimeAware 接口。例如,某个服务的 Starting 方法可以访问其他所有已注册的服务,而不考虑注册顺序。此外,Started 方法可以访问应用程序 Startup 事件中初始化的所有内容,如 RootVisual 属性值。

下面的列表指示发生应用程序生存期事件以及调用 IApplicationServiceIApplicationLifetimeAware 方法的顺序:

  1. 应用程序为每个应用程序服务调用 IApplicationService..::.StartService 方法。
  2. 应用程序为每个 IApplicationLifetimeAware 服务调用 Starting 方法。
  3. 发生 Application..::.Startup 事件。
  4. 应用程序为每个 IApplicationLifetimeAware 服务调用 Started 方法。
  5. 应用程序一直运行,直到由用户操作启动停止序列。这通常在用户关闭应用程序或浏览器窗口时或者用户将浏览器导航到新网页时发生。
  6. 应用程序为每个 IApplicationLifetimeAware 服务调用 Exiting 方法。
  7. 发生 Application..::.Exit 事件。
  8. 应用程序为每个 IApplicationLifetimeAware 服务调用 Exited 方法。
  9. 应用程序为每个应用程序服务调用 IApplicationService..::.StopService 方法。

应用程序为每个服务调用每个服务方法一次。这些方法按这些服务的注册顺序调用,但 StopService 方法按相反顺序调用。这样就可以如上一节所述按顺序清除。


标签:Silverlight,IApplicationLifetimeAware,服务,扩展,应用程序,Application,注册,方法
From: https://blog.51cto.com/u_3319687/6603652

相关文章

  • Silverlight资源字典
     资源字典是一个受ResourceDictionary类支持的概念。资源字典是一个键控对象字典,可在XAML和代码中使用。XAML是最常见的用法,特别是用于最初定义资源字典中的对象。资源字典可存在于应用程序结构中的多个位置,包括作为直接(页)资源、应用程序资源(作为Application对象的一部分)或......
  • Silverlight如何使用应用程序库缓存
     应用程序库缓存可在用户重新访问网站时帮助改善启动性能。当您使用应用程序库缓存时,Silverlight将某些程序集打包成应用程序包外部的外部部件(.xap文件)。应用程序包中的清单指定启动时所需的程序集,并指示它们是在应用程序包的内部还是外部。当用户首次访问您的网页时,Silverlight......
  • Silverlight 3 中的新增功能
    本主题包括下列各节。三维效果(透视转换)位图效果和像素着色器WriteableBitmap位图缓存支持新媒体(原始视频/音频和H.264)在运行时更改样式BasedOn样式动画缓动函数标志符号中的FontSource支持脱离浏览器支持基于Silverlight的本地应用程序之间的通信应用程序库缓存应用程序扩展......
  • Silverlight路线图
     本主题介绍用于开发基于Silverlight的应用程序的主要功能。其中包含使用代码示例创建基于Silverlight的应用程序的常规步骤,以帮助您初步了解如何编写代码。本主题包括下列各节。先决条件将Silverlight集成到应用程序中XAML布局控件添加代码逻辑动态语言图形媒体和动画数据......
  • Silverlight应用程序服务
     当使用Silverlight的托管API创建应用程序时,必须创建一个从Application派生的类。Application类提供应用程序通常要求的若干服务。它主要表示应用程序代码在Silverlight插件生命周期中的入口点。Silverlight插件生命周期自用户导航到承载Silverlight插件的网页时开始......
  • 如何创建新Silverlight项目
     Silverlight项目文件是您可以使用不同工具来创建和编辑的文本文件。例如,可以使用VisualStudio2008和ExpressionBlend来创建Silverlight项目或修改现有项目。有关更多信息,请参见ExpressionBlend文档。本主题介绍如何使用VisualStudio2008来创建和生成新的Silver......
  • 光脚丫学ASP.NET MVC(0001):创建ASP.NET MVC应用程序项目
    演示视频:http://u.115.com/file/cloa5hpg本演示介绍了如何使用VisualStudio2010创建ASP.NETMVC应用程序项目。下面是VS的新建项目对话框。其中红色线圈住的两个模板是VS2010安装时就自带的ASP.NETMVC2的项目模板,可以从官方网站下载最新的项目模板。下图是新建单元测试项目对话......
  • 在 Kubernetes(k8s) 上部署 Spring Boot 应用程序:应用程序使用环境变量中的错误端口属
    如果我使用此配置启动部署(即先启动服务,然后启动部署)则pod在启动期间会失败。在日志中,我可以找到以下消息:***************************APPLICATIONFAILEDTOSTART***************************Description:Bindingtotargetorg.springframework.boot.autoconfigu......
  • 深入探究Bean生命周期的扩展点:Bean Post Processor
    在Spring框架中,Bean生命周期的管理是非常重要的一部分。在Bean的创建、初始化和销毁过程中,Spring提供了一系列的扩展点,使开发者能够在不破坏原有功能的基础上,对Bean的生命周期进行定制化操作。其中,BeanPostProcessor(后处理器)是一个重要的扩展点,它能够在Bean的初始化前后做一些额......
  • 深入探究Bean生命周期的扩展点:Bean Post Processor
    在Spring框架中,Bean生命周期的管理是非常重要的一部分。在Bean的创建、初始化和销毁过程中,Spring提供了一系列的扩展点,使开发者能够在不破坏原有功能的基础上,对Bean的生命周期进行定制化操作。其中,BeanPostProcessor(后处理器)是一个重要的扩展点,它能够在Bean的初始化前后做一些额......