SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Silverlight 3徹底入門

Silverlight 3で強化された実行環境

Silverlight 3徹底入門(8)

アプリケーション拡張サービス

 Silverlightでは、アプリケーションの初期化コードであればApp.xamlに定義されたStartUpイベントに記述を行い、終了時のイベントであればExitイベントに記述を行います。Silverlight 3ではアプリケーション拡張サービスによって初期化コードや終了コードをコンポーネント化し、あらかじめ登録できます。

 例えば独自フレームワークの初期化コードをコンポーネント化しておくことで、ユーザーは初期化コードをわざわざApp.xamlに記述する必要がなくなり、クリーンアップコードの記述忘れもなくなるでしょう。

 Silverlightアプリケーションを拡張するには、Applicationクラスのサブクラスを作ってApplicationクラスを置き換える方法と、Silverlight 3から提供されたアプリケーション拡張サービスを利用する方法の2通りの方法があります。しかし、Applicationクラスのサブクラスを作る方法では、ほかのフレームワークを適用しづらくするといったマイナス面の方が多いため、通常はアプリケーション拡張サービスを利用した拡張を行うべきでしょう。

 サービスを実装する場合、IApplicationServiceインターフェースを実装したクラスをApp.xamlに登録して利用します。

 サービスを追加する場合は次の3つのステップの作業を行います。

  1. IApplicationServiceインターフェースの実装
  2. (必要であれば)IApplicationLifetimeAwareインターフェースの実装
  3. サービスを登録

1. IApplicationServiceインターフェースの実装

 アプリケーション拡張サービスにサービスとして登録するためには、必ずIApplicationServiceインターフェースを実装する必要があります。IApplicationServiceインターフェースはStartServiceメソッドとStopServiceメソッドを実装することで、アプリケーションの初期化コードや終了コードを記述できます。

 リスト3はアプリケーション起動時に初期化パラメータを取得して、静的な変数にパラメータを設定しているサンプルです。

[リスト3]IApplicationServiceの実装(CustomService1.cs)
public class CustomService1 : IApplicationService
{
  /// <summary>
  /// アプリケーションの起動パラメータを保持します。
  /// </summary>
  public static MyApplicationContext MyContext { get; private set; }

  #region IApplicationService メンバ
  /// <summary>
  /// アプリケーションの開始時に実行されます。
  /// </summary>
  public void StartService(ApplicationServiceContext context)
  {
    MyContext = new MyApplicationContext()
      {
        Parameter1 = context.ApplicationInitParams["param1"],
        Parameter2 = context.ApplicationInitParams["param2"],
      };
        Debug.WriteLine("CustomService1 StartService");
    }

  /// <summary>
  /// アプリケーションの終了時に実行されます。
  /// </summary>
  public void StopService()
  {
    Debug.WriteLine("CustomService1 StopService");
  }
  #endregion
}

 アプリケーションの起動パラメーターは、ApplicationServiceContextクラスのApplicationInitParamsプロパティに格納されています。リスト3の例では、StartServiceメソッド内で、Objectタグのparams経由でアプリケーションの起動引数を受け取り、独自のMyApplicationContextクラスのインスタンスに値を格納しています。

 MyApplicationContextクラスの定義をリスト4に示します。

 MyContextはstaticプロパティとして定義しているので、アプリケーションコードからは、CustomService1.MyContextといった方法で簡単にアプリケーションのコンテキストにアクセスできます。

[リスト4]MyApplicationContextの定義(MyApplicationContext.cs)
public class MyApplicationContext
{
  public string Parameter1 { get; set; }
  public string Parameter2 { get; set; }
}

 Objectタグでアプリケーションにパラメーターを渡す場合、リスト5のようにinitparamsにパラメータ名=値の一覧をカンマ区切りで指定します。

[リスト5]パラメーターの渡し方(Silverlight3-7SampleTestPage.aspx)
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
  <param name="source" value="ClientBin/Silverlight3-7Sample.xap"/>
  <param name="onError" value="onSilverlightError" />
  <param name="background" value="white" />
  <param name="minRuntimeVersion" value="3.0.40818.0" />
  <param name="autoUpgrade" value="true" />
  <param name="initparams" value="param1=パラメーター1,param2=パラメーター2" />
</object>

次のページ

この記事は参考になりましたか?

Silverlight 3徹底入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト かるあ (杉山 洋一)(カルア(スギヤマ ヨウイチ))

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5147 2010/05/17 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー