VB のたまご

作成日: 2017/05/14, 更新日: 2017/05/14



Bootstrap

  •  ここでは、Bootstrap(ブートストラップ、Prism の起動処理担当)について学習します。

  • スポンサーリンク


  •  WPF では Application.xaml がアプリケーションの起動処理を担当しています。 StartupUri 属性に最初の画面名を書いたり、StartUp イベントを購読したり、OnStartUp メソッドをオーバーライドしたり、 いろいろなところで起動処理を書きます。

  •  Prism アプリケーションを作成する場合は、Application.xaml から Prism 専用の Application.xaml 担当となる Bootstrapper(ブートストラッパー)が用意されています。 Bootstrapper は、Prism 内で使用する Unity コンテナや、後から出てくるモジュールカタログの初期処理をおこなっています。

  • イメージ
  •  以下は、そのサンプルです。

  • Application.xaml.vb
    Class Application
    
        ' Startup、Exit、DispatcherUnhandledException などのアプリケーション レベルのイベントは、
        ' このファイルで処理できます。
    
        Protected Overrides Sub OnStartup(e As StartupEventArgs)
            MyBase.OnStartup(e)
    
            Dim boot = New Bootstrapper
            boot.Run()
    
        End Sub
    
    End Class
    
    Bootstrapper.vb
    
    Imports Microsoft.Practices.Unity
    Imports Prism.Unity
    Imports WpfApplication1.Views
    
    Public Class Bootstrapper
        Inherits UnityBootstrapper
    
        ' Shell 担当になる View のインスタンスを返却
        Protected Overrides Function CreateShell() As DependencyObject
            Return Me.Container.Resolve(Of Window1)
        End Function
    
        ' Shell 担当になる View を表示
        Protected Overrides Sub InitializeShell()
            Application.Current.MainWindow.Show()
        End Sub
    
    End Class
    

  •  このシリーズでは、UnityBootstrapper クラスを継承してブートストラッパーを作成します。 ここで、Shell という言葉が出ていますが、ここでは、最初に表示する画面のことだと思ってもらえれば OK です。

  •  最初に、CreateShell メソッドで、表示する画面のインスタンスを指定します(返却します)。 続いて、InitializeShell メソッドで、表示する画面を表示させます。

  •  Prism アプリケーションを作成する場合、必ずこれを書きますので、毎回定型文として書くんだな~的なイメージで OK です。

  • スポンサーリンク


  •  最後に全体ソースを表示する前に、Prism アプリケーション作成時の注意です。

  •  1.Prism では、Model, View, ViewModel の名前空間を分けて管理するので、デフォルト配置の MainWindow.xaml は使いません。 分かりづらいので削除してしまいます。

  •  2.以降では、都度 NuGet パッケージの管理より「Prism.Unity」をインストールして学習します。 また、Model 層は「Models」フォルダ、View 層は「Views」フォルダ、ViewModel 層は「ViewModels」フォルダと、レイヤーを分けて管理します。

  •  3.プロジェクトに新規追加したファイルには、名前空間が記載されていません。 プロジェクト直下のファイルなら名前空間を付けなくてもいいですが、上記3層のフォルダ内にファイル追加する場合は、 名前空間を付けるのを忘れないようにしてください。

  • ・Model 層の場合
  • Namespace Models
    
      Public Class SampleModel
    
      End Class
    
    
    End Namespace
    

  • ・View 層の場合(コードビハインド側)
  • Namespace Views
    
      Public Class SampleView
    
      End Class
    
    
    End Namespace
    

  • ・ViewModel 層の場合
  • Namespace ViewModels
    
      Public Class SampleViewModel
    
      End Class
    
    
    End Namespace
    

  •  それでは、以下全体ソースです。

  •  Window1.xaml

  • <Window x:Class="Views.Window1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApplication1.Views"
            mc:Ignorable="d"
            Title="Window1" Height="300" Width="300">
        
        <Grid>
            <TextBlock Text="Hello, Prism!" />
        </Grid>
        
    </Window>
    

  •  Window1.xaml.vb

  • Namespace Views ' ←名前空間を追加する
    
        Public Class Window1
    
        End Class
    
    End Namespace
    

  •  Bootstrapper.vb

  • Imports Microsoft.Practices.Unity
    Imports Prism.Unity
    Imports WpfApplication1.Views
    
    Public Class Bootstrapper
        Inherits UnityBootstrapper
    
        ' Shell 担当になる View のインスタンスを返却
        Protected Overrides Function CreateShell() As DependencyObject
            Return Me.Container.Resolve(Of Window1)
        End Function
    
        ' Shell 担当になる View を表示
        Protected Overrides Sub InitializeShell()
            Application.Current.MainWindow.Show()
        End Sub
    
    End Class
    

  •  Application.xaml

  • <Application x:Class="Application"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1">
        
        <!--
        【StartupUri="MainWindow.xaml"】を削除
        コードビハインドで、OnStartup メソッドをオーバーライド
        -->
        
        <Application.Resources>
            
        </Application.Resources>
    </Application>
    

  •  Application.xaml.vb

  • Class Application
    
        ' Startup、Exit、DispatcherUnhandledException などのアプリケーション レベルのイベントは、
        ' このファイルで処理できます。
    
        Protected Overrides Sub OnStartup(e As StartupEventArgs)
            MyBase.OnStartup(e)
    
            ' Unity 管理による Prism アプリケーションの起動制御処理を実行
            Dim boot = New Bootstrapper
            boot.Run()
    
        End Sub
    
    End Class