LoginSignup
7
9

More than 5 years have passed since last update.

Prism 6.3から7.0にアップデートする

Last updated at Posted at 2018-05-17

はじめに

XamarinやPrismについて知らない人はこれらの記事を読んでください。

https://qiita.com/amay077/items/38ee79b3e3e88cf751b9
http://www.nuits.jp/entry/2016/08/11/160313

今回はPrism6.3から7.0にアップデートする方法について説明します。

VisualStudio 2017 For Mac のPrismのテンプレートは2018/05の時点でPrism6.3向けになっています。Prismの最新版は7.0です。

最新の環境に合わせるために、6.3のテンプレートから7.0にアップデートします。

手順

まずはVisualStudioからパッケージを最新にします。
そしてコンパイルすると...エラーができます。

Prismは6.3から7.0の更新で破壊的変更が行われています。
そのため、テンプレートのコードから変更が必要になります。

App.xaml.cs

変更前

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Practices.Unity;
using Prism.Unity;
using prismSample.Views;

namespace prismSample
{
    public partial class App : PrismApplication
    {
        public App(IPlatformInitializer initializer = null) : base(initializer) { }

        protected override void OnInitialized()
        {
            InitializeComponent();

            NavigationService.NavigateAsync("MainPage?title=Hello%20from%20Xamarin.Forms");
        }

        protected override void RegisterTypes()
        {
            Container.RegisterTypeForNavigation<MainPage>();
        }
    }
}

変更後

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Prism.Unity;
using prismSample.Views;
using Prism;
using Prism.Ioc;

namespace prismSample
{
    public partial class App : PrismApplication
    {
        public App(IPlatformInitializer initializer = null) : base(initializer) { }

        protected override void OnInitialized()
        {
            InitializeComponent();

            NavigationService.NavigateAsync("MainPage?title=Hello%20from%20Xamarin.Forms");
        }

        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            containerRegistry.RegisterForNavigation<MainPage>();
        }
    }
}

名前空間が消えたり変わったりしたのでusingを変更します。

using Microsoft.Practices.Unity;

を消して

using Prism;
using Prism.Ioc;

を追加しました。

RegisterTypesの引数や使い方が変わったので全面的に書き換えました。

AppDelegate.cs

using System;
using System.Collections.Generic;
using System.Linq;

using Foundation;
using UIKit;

using Prism.Unity;
using Prism;
using Prism.Ioc;

namespace prismSample.iOS
{
    // The UIApplicationDelegate for the application. This class is responsible for launching the 
    // User Interface of the application, as well as listening (and optionally responding) to 
    // application events from iOS.
    [Register("AppDelegate")]
    public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
    {
        //
        // This method is invoked when the application has loaded and is ready to run. In this 
        // method you should instantiate the window, load the UI into it and then make the window
        // visible.
        //
        // You have 17 seconds to return from this method, or iOS will terminate your application.
        //
        public override bool FinishedLaunching(UIApplication app, NSDictionary options)
        {
            global::Xamarin.Forms.Forms.Init();

            LoadApplication(new App(new iOSInitializer()));

            return base.FinishedLaunching(app, options);
        }
    }

    public class iOSInitializer : IPlatformInitializer
    {
        public void RegisterTypes(IContainerRegistry container)
        {

        }
    }
}

先ほどと同じようにusingとRegisterTypesを書き換えました。

MainActivity.cs

using System;

using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;

using Prism.Unity;
using Prism;
using Prism.Ioc;

namespace prismSample.Droid
{
    [Activity(Label = "prismSample.Droid", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            global::Xamarin.Forms.Forms.Init(this, bundle);

            LoadApplication(new App(new AndroidInitializer()));
        }
    }

    public class AndroidInitializer : IPlatformInitializer
    {
        public void RegisterTypes(IContainerRegistry container)
        {

        }
    }
}

先ほどと同じようにusingとRegisterTypesを書き換えました。

Androidでうまく行かない場合

生成されたJavaのコードで上手く動かないことがあります。
そういう時はリビルドすると治る場合があります。

最後に

次はPrismの使い方について説明していきます。

7
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
9