はじめに
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の使い方について説明していきます。