SlideShare una empresa de Scribd logo
1 de 27
Xamarin の救世主 Unity!
2014/12/06(土) わんくま勉強会 東京 #93
@matatabi-ux
クロスプラットフォーム開発 × DI コンテナのすすめ
ゲーム開発ツール
じゃない方
お や く そ く
掲載内容は個人の私見であり、
所属組織の見解ではありません
自己紹介: 黒柳 達士(@matatabi-ux)
• お仕事
⁃ 某第二工場で Windows ストアアプリ大量生産中
⁃ 拝承系 SIer → 安心簡単快適デザイン会社 → 現職
• 個人活動
⁃ Blog: 「しっぽを追いかけて」 http://matatabi-ux.hateblo.jp
⁃ facebook: https://www.facebook.com/tatsuj.kuroyanagi
⁃ 日本人間工学会 認定人間工学専門家 UX 語れます
⁃ 飼い猫写真も垂れ流し中
twitter: https://twitter.com/burst_cafemocha
facebook: https://www.facebook.com/burst.cafemocha
しっぽもふもふの自宅警備ネコ 「モカ」
今回の目標とおことわり
• 目標
⁃ Xamarin でも使える強力な DI コンテナ Unity のご紹介
⁃ Xamarin のクロスプラットフォーム開発で DI コンテナの活用方法を提案
• 注意事項
⁃ ゲーム開発ツールの Unity じゃありません!一緒にしないで!
⁃ Xamarin は現在進行形で進化中なので仕様が大きく変わるかも
⁃ XAML をある程度知っている C# エンジニア視点でまとめました
⁃ Xamarin で使える Unity はプレリリース版
おしながき
• DI コンテナ Unity の概要
• Xamarin プロジェクトへの Unity 導入
• Xamarin × インスタンスの解決
• Xamarin × 依存関係の注入
• まとめ
※ この発表資料は SlideShare で公開します
http://www.slideshare.net/tatsujkuroyanagi/xamarin-unity
Unity DI コンテナ Unity の概要
DI コンテナ Unity の概要
ビジネスアプリ開発用 「依存関係注入」 コンテナライブラリ
⁃ Microsoft patterns & practices チームが進めているプロジェクト成果物のひとつ
⁃ 軽量で柔軟性の高い DI コンテナとその実践パターンを提供
⁃ Dependency Injection:依存関係注入とは実行時に外部からオブジェクトの振る舞いを決定する機能
Inversion of Control:制御の反転を
実現する有力な設計パターンのひとつ
Instance
Resolution
Life Time
Controll
Constructor
Injection
Property
Injection
Method
Injection
Service B
DI コンテナ Unity の概要
Service A
Client
Service B
DI Container
Client
Service A Service
Interface
インスタンス生成サービス実装の解決
依存関係の注入
サービス利用
サービス利用
通常の設計(制御側がサービス実装に依存する) 依存関係注入の設計(サービス実装が制御側により決定される)
Inversion of Control:制御の反転を実現する 「依存関係の注入」
⁃ クライアントクラスからサービスクラスを利用する場合、クライアント側がサービス側の変更に影響を受けてしまう
⁃ サービスクラスは共通インタフェースを実装して内部実装を隠ぺいする
⁃ DI コンテナがクライアントインスタンスを生成しサービスクラスを渡すことで制御を反転させる
DI コンテナ Unity の概要
DI コンテナ「Unity」が Xamarin の救世主となるワケ
⁃ C# の Xamarin 対応 PCL として提供されている DI コンテナ
⁃ もちろんライセンス形態は iOS、Android に利用できる Apache 2.0 ライセンス
⁃ Xamarin では各プラットフォームごとの処理記述が冗長になりやすい
⁃ Xamarin では共通コードに各プラットフォームごとの分岐処理が入り込みやすい
Instance
Resolution
Life Time
Controll
Constructor
Injection
Property
Injection
Method
Injection
DI コンテナ Unity の概要
DI コンテナ「Unity」が Xamarin の救世主となるワケ
⁃ 冗長な処理記述 → 抽出したインタフェース実装で共通機能に集約される
⁃ 共通コードに分岐処理が入り込む → 分岐処理は DI コンテナが肩代わり
⁃ 共通処理と固有処理が整理され、クラス間の依存性が下がる
iOS
PCL / Shared
Windows
クラス間が密結合で、共通コードが各プラットフォームに依存 制御が反転し、共通コードがプラットフォーム依存から分離される
Android
iOS
PCL / Shared
Windows
Androidコード
保守性
テスト
容易性
開発
生産性
コード
保守性
テスト
容易性
開発
生産性
Xamarin
×
Unity
Xamarin プロジェクトへの
Unity 導入
Xamarin プロジェクトへの Unity 導入
Shared プロジェクトの場合、共通
コードとプラットフォーム固有コードを
混在できるため
Xamarin プロジェクトの作成
⁃ Xamarin.Forms の PCL プロジェクトで作るのがおすすめ!
Xamarin プロジェクトへの Unity 導入
Unity パッケージのインストール
⁃ Visual Studio からソリューションを選び NuGet パッケージマネージャを開く
⁃ 検索対象を「リリース前のパッケージを含める」にする
⁃ 「Unity」 で検索して Unity 3.5.1405-prerelease 以降を選択してインストールする
忘れやすいので注意!
Visual Studio 2013 の場合 Visual Studio 2015 Preview の場合
DEMO
Xamarin プロジェクトへ
の Unity 導入
Xamarin
×
Resolver
Xamarin × インスタンスの
解決
var container = new UnityContainer();
container.RegisterType<ITextSpeechService, TextSpeechService>(
null, // 同一型で区別される登録名称(省略可能)
new ContainerControlledLifetimeManager(), // インスタンスの生存管理方法(省略可能)
new InjectionMember[], // 注入する依存関係設定(省略可能)
);
var service = container.ResolveType<ITextSpeechService>();
Xamarin × インスタンスの解決
インタフェースとインスタンスの
型を指定
Unity を利用したインスタンスの解決
⁃ 事前に RegisterType メソッドでクラスのインスタンス化時の振る舞いを登録
⁃ ResolveType メソッドで登録された内容に応じてインスタンスが取得できる
InjectionMember について
は後述
Xamarin × インスタンスの解決
指定できる LifetimeManager の種類
インスタンス共有範囲 インスタンスの生存期間
TransientLifetimeManager
※ 未指定時のデフォルト
共有なし(解決時に毎回生成) 生成後はコンテナには保持されない
PerThreadLifetimeManager スレッド内で共有 明示的に破棄するまで(強い参照)
ExternallyControlledLifetime
Manager
コンテナ内で共有
ガベージコレクションに回収されるまで
(弱い参照)
ContainerControlledLifetime
Manager
コンテナ内で共有 明示的に破棄するまで(強い参照)
DEMO
Xamarin × インスタンス
の解決
※このデモのソースコードは GitHub で公開中
https://github.com/matatabi-ux/XamarinUnityResolution
Xamarin
×
Injection
Xamarin × 依存関係の注入
Xamarin × 依存関係の注入
Unity で利用できる依存関係の注入機能(インスタンス生成時に注入)
⁃ コンストラクター注入 :Constructor Injection
利用するコンストラクタ、引数を変える ※ 引数に null は指定不可
既定で Unity で管理するクラスはインスタンス生成時にコンストラクター注入が自動で行われる
⁃ プロパティ注入 :Property Injection
生成されるインスタンスのプロパティ値を変える ※ 要 public Setter
⁃ メソッド呼び出し注入 :Method Call Injection
呼び出されるメソッド、引数を変える
コンストラクタ、プロパティで指定できない
private なメンバーの初期化には、メソッド
呼び出しの注入を利用するにゃ!
Xamarin × 依存関係の注入
Unity の依存関係の注入の構成手法
構成の方法 主な特徴
構成ファイル
※今回は詳しい説明割愛
app.config ファイルで依存関
係を指定
構成ごとの柔軟な設定が簡単
コードによって追えない
残念ながら Xamarin では利用不可
実行時に指定
初期化処理コードの中で、
コードにより指定
コードの初期化子で柔軟な指定が可能
インテリセンス、コードによる追跡ができる
属性付与による宣言
インスタンス化するサービス
クラスに属性を付与して宣言
静的な指定だがコード自動生成と相性がいい
インテリセンス、コードによる追跡ができる
サービスクラスを見ることで依存関係が見える
コンストラクター注入
⁃ 実行時の基本的な指定方法
⁃ 属性での宣言方法
new InjectionConstructor(typeof(ITextSpeechService), “Speech Message”)
Xamarin × 依存関係の注入
型か名称で、注入するパラメータ
のインスタンスを指定
[InjectionConstructor]
public PageViewModel(
ITextSpeechService textService,
[Dependency(“Speech Message”)] string message)
InjectionConstructor の属性が優先されて利用される
指定がなかった場合は一番パラメータ数が多いものが優先
属性を省略した場合は型での解決、
指定した場合は名称で解決されます
プロパティ注入
⁃ 実行時の基本的な指定方法
⁃ 属性での宣言方法
new InjectionProperty(“Text Service”), new InjectionProperty(“Message”, “Speech Message”),
new InjectionProperty(“Logger”, new ResolvedParameter(typeof(ILogger), “FileLogger"))
Xamarin × 依存関係の注入
[Dependency]
public ITextSpeechService TextService { get; set; }
[Dependency(“Speech Message”)]
public string Message { get; set; }
引数を省略した場合は型での解決、指定
した場合は型&名称で解決される
引数を省略した場合は型での解決、指定
した場合は名称で解決される
ResolvedParameter を指定することで型と
名称の組み合わせで解決することも
メソッド呼び出し注入
⁃ 実行時の基本的な指定方法
⁃ 属性での宣言方法
new InjectionMethod(“Initialize”, typeof(ITextSpeechService), “Speech Message”,
new ResolvedParameter(typeof(ILogger), “FileLogger"))
Xamarin × 依存関係の注入
型か名称で、注入するパラメータ
のインスタンスを指定
[InjectionMethod]
public void Initialize(
ITextSpeechService textService,
[Dependency(“Speech Message”)] string message)
InjectionMethod の属性が優先されて利用される
属性を省略した場合は型での解決、
指定した場合は名称で解決されます
ResolvedParameter を指定することで型と
名称の組み合わせで解決することも
DEMO Xamarin × 依存関係の注入
※このデモのソースコードは GitHub で公開中
https://github.com/matatabi-ux/XamarinUnityInjection
まとめ
• Xamarin でこそ Unity を使うべき!
⁃ クロスプラットフォーム開発はプラットフォーム固有処理が冗長でクラス間が密結合になりがち
⁃ DI コンテナを利用することで、影響範囲を狭めた改修とテストしやすい実装ができる
⁃ Xamarin で利用する DI コンテナは Unity がおすすめ!
• インスタンスの解決と依存関係の注入を使いこなそう
⁃ インスタンス解決と共有範囲と生存期間を設定できる
⁃ 利用できる注入の種類は、コンストラクタ、プロパティ、呼び出しメソッドの 3 種類
⁃ 注入構成の方法は、構成ファイル、実行時の指定、属性による宣言の 3 種類
iOS
PCL / Shared
Windows
Android
参考情報
• Microsoft patterns & practices - Unity プロジェクトページ
https://unity.codeplex.com/
• Unity 3 MSDN(英語)
http://msdn.microsoft.com/ja-jp/library/dn170416.aspx
• @IT – 新しいオブジェクト生成機構で EntLib はこう変わる!
http://www.atmarkit.co.jp/fdotnet/entlib/entlibv4/entlibv4_02.html
Instance
Resolution
Life Time
Controll
Constructor
Injection
Property
Injection
Method
Injection

Más contenido relacionado

La actualidad más candente

Realm Mobile Platform 概要
Realm Mobile Platform 概要Realm Mobile Platform 概要
Realm Mobile Platform 概要Yoshito Tabuchi
 
BlueMonkeyプロジェクトのご紹介
BlueMonkeyプロジェクトのご紹介BlueMonkeyプロジェクトのご紹介
BlueMonkeyプロジェクトのご紹介Yoshito Tabuchi
 
10分でわかる無料になったXamarin
10分でわかる無料になったXamarin10分でわかる無料になったXamarin
10分でわかる無料になったXamarinYoshito Tabuchi
 
ゆるふわ Xamarin Tips
ゆるふわ Xamarin Tipsゆるふわ Xamarin Tips
ゆるふわ Xamarin TipsDaiki Kawanuma
 
Xamarin から使う Azure
Xamarin から使う AzureXamarin から使う Azure
Xamarin から使う AzureYoshito Tabuchi
 
Xamarin概要と活用方法
Xamarin概要と活用方法Xamarin概要と活用方法
Xamarin概要と活用方法Yoshito Tabuchi
 
[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~
[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~
[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~de:code 2017
 
20171202 Xamarinの歩き方
20171202 Xamarinの歩き方20171202 Xamarinの歩き方
20171202 Xamarinの歩き方Yoshito Tabuchi
 
NET Standard と Xamarin
NET Standard と XamarinNET Standard と Xamarin
NET Standard と XamarinYoshito Tabuchi
 
Xamarin開発環境の選択
Xamarin開発環境の選択Xamarin開発環境の選択
Xamarin開発環境の選択Miho Kurosawa
 
JXUGC 13 東京 はじめに
JXUGC 13 東京 はじめにJXUGC 13 東京 はじめに
JXUGC 13 東京 はじめにYoshito Tabuchi
 
#VSUG LT #JXUG の紹介
#VSUG LT #JXUG の紹介#VSUG LT #JXUG の紹介
#VSUG LT #JXUG の紹介Yoshito Tabuchi
 
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編Yoshito Tabuchi
 
Win/Mac/Android/iOS向け クロスプラットフォーム開発にXamarinが うまくハマりそうだった話
Win/Mac/Android/iOS向けクロスプラットフォーム開発にXamarinがうまくハマりそうだった話Win/Mac/Android/iOS向けクロスプラットフォーム開発にXamarinがうまくハマりそうだった話
Win/Mac/Android/iOS向け クロスプラットフォーム開発にXamarinが うまくハマりそうだった話Takuya Kikuchi
 
第1回 Japan Xamarin User Group Conference - Xamarin 概要
第1回 Japan Xamarin User Group Conference - Xamarin 概要第1回 Japan Xamarin User Group Conference - Xamarin 概要
第1回 Japan Xamarin User Group Conference - Xamarin 概要Yoshito Tabuchi
 
わんくま名古屋 #38 (20160521) Xamarin入門
わんくま名古屋 #38 (20160521) Xamarin入門わんくま名古屋 #38 (20160521) Xamarin入門
わんくま名古屋 #38 (20160521) Xamarin入門Yasuhiko Yamamoto
 

La actualidad más candente (20)

Xamarin 基礎講座
Xamarin 基礎講座Xamarin 基礎講座
Xamarin 基礎講座
 
Realm Mobile Platform 概要
Realm Mobile Platform 概要Realm Mobile Platform 概要
Realm Mobile Platform 概要
 
BlueMonkeyプロジェクトのご紹介
BlueMonkeyプロジェクトのご紹介BlueMonkeyプロジェクトのご紹介
BlueMonkeyプロジェクトのご紹介
 
Xamarinの歩き方
Xamarinの歩き方Xamarinの歩き方
Xamarinの歩き方
 
10分でわかる無料になったXamarin
10分でわかる無料になったXamarin10分でわかる無料になったXamarin
10分でわかる無料になったXamarin
 
Visual Studio + xamarin で始めるモバイル アプリ開発
Visual Studio + xamarin で始めるモバイル アプリ開発Visual Studio + xamarin で始めるモバイル アプリ開発
Visual Studio + xamarin で始めるモバイル アプリ開発
 
ゆるふわ Xamarin Tips
ゆるふわ Xamarin Tipsゆるふわ Xamarin Tips
ゆるふわ Xamarin Tips
 
Xamarin から使う Azure
Xamarin から使う AzureXamarin から使う Azure
Xamarin から使う Azure
 
Xamarin概要と活用方法
Xamarin概要と活用方法Xamarin概要と活用方法
Xamarin概要と活用方法
 
Xamarin概要
Xamarin概要Xamarin概要
Xamarin概要
 
[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~
[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~
[MW08] de:code イベントアプリの作り方 ~ Xamarin.Forms で開発しています ~
 
20171202 Xamarinの歩き方
20171202 Xamarinの歩き方20171202 Xamarinの歩き方
20171202 Xamarinの歩き方
 
NET Standard と Xamarin
NET Standard と XamarinNET Standard と Xamarin
NET Standard と Xamarin
 
Xamarin開発環境の選択
Xamarin開発環境の選択Xamarin開発環境の選択
Xamarin開発環境の選択
 
JXUGC 13 東京 はじめに
JXUGC 13 東京 はじめにJXUGC 13 東京 はじめに
JXUGC 13 東京 はじめに
 
#VSUG LT #JXUG の紹介
#VSUG LT #JXUG の紹介#VSUG LT #JXUG の紹介
#VSUG LT #JXUG の紹介
 
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
 
Win/Mac/Android/iOS向け クロスプラットフォーム開発にXamarinが うまくハマりそうだった話
Win/Mac/Android/iOS向けクロスプラットフォーム開発にXamarinがうまくハマりそうだった話Win/Mac/Android/iOS向けクロスプラットフォーム開発にXamarinがうまくハマりそうだった話
Win/Mac/Android/iOS向け クロスプラットフォーム開発にXamarinが うまくハマりそうだった話
 
第1回 Japan Xamarin User Group Conference - Xamarin 概要
第1回 Japan Xamarin User Group Conference - Xamarin 概要第1回 Japan Xamarin User Group Conference - Xamarin 概要
第1回 Japan Xamarin User Group Conference - Xamarin 概要
 
わんくま名古屋 #38 (20160521) Xamarin入門
わんくま名古屋 #38 (20160521) Xamarin入門わんくま名古屋 #38 (20160521) Xamarin入門
わんくま名古屋 #38 (20160521) Xamarin入門
 

Destacado

Diってなんだ
DiってなんだDiってなんだ
DiってなんだFits696
 
XamarinStudio勉強会 2014/09/08
XamarinStudio勉強会 2014/09/08XamarinStudio勉強会 2014/09/08
XamarinStudio勉強会 2014/09/08孝文 田村
 
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソースEnpel
 
Black jumbodogの新機能(webapi)~自動テストにおけるsmtpモックとして
Black jumbodogの新機能(webapi)~自動テストにおけるsmtpモックとしてBlack jumbodogの新機能(webapi)~自動テストにおけるsmtpモックとして
Black jumbodogの新機能(webapi)~自動テストにおけるsmtpモックとしてShinichi Hirauchi
 
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -ShinichiAoyagi
 
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッションEnpel
 
Visual Studio Tools for Unity
Visual Studio Tools for UnityVisual Studio Tools for Unity
Visual Studio Tools for Unity友太 渡辺
 
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定Enpel
 
シルバーウィークにfacebookアプリを作成した
シルバーウィークにfacebookアプリを作成したシルバーウィークにfacebookアプリを作成した
シルバーウィークにfacebookアプリを作成したShinichi Hirauchi
 
Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてUnity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてTatsuhiko Yamamura
 
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介Yoshito Tabuchi
 
DI(依存性注入)について
DI(依存性注入)についてDI(依存性注入)について
DI(依存性注入)についてYui Ito
 
Xamarin.forms実践投入してみて
Xamarin.forms実践投入してみてXamarin.forms実践投入してみて
Xamarin.forms実践投入してみてMasahiko Miyasaka
 
Xamarin ~ iOS/Android/Windows アプリを C# で作ろう~
Xamarin ~ iOS/Android/Windows アプリをC# で作ろう~Xamarin ~ iOS/Android/Windows アプリをC# で作ろう~
Xamarin ~ iOS/Android/Windows アプリを C# で作ろう~Fujio Kojima
 
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaTomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaNorito Agetsuma
 
Xamarin によるクロスプラットフォームモバイルアプリ開発
Xamarin によるクロスプラットフォームモバイルアプリ開発Xamarin によるクロスプラットフォームモバイルアプリ開発
Xamarin によるクロスプラットフォームモバイルアプリ開発Hironov OKUYAMA
 
Xamarin 実戦投入時に気をつけたいことあれこれ
Xamarin 実戦投入時に気をつけたいことあれこれXamarin 実戦投入時に気をつけたいことあれこれ
Xamarin 実戦投入時に気をつけたいことあれこれTomohiro Suzuki
 
がんばれガンプ ソルバルウを倒せ
がんばれガンプ ソルバルウを倒せがんばれガンプ ソルバルウを倒せ
がんばれガンプ ソルバルウを倒せTomohiro Suzuki
 

Destacado (20)

Diってなんだ
DiってなんだDiってなんだ
Diってなんだ
 
Di入門
Di入門Di入門
Di入門
 
XamarinStudio勉強会 2014/09/08
XamarinStudio勉強会 2014/09/08XamarinStudio勉強会 2014/09/08
XamarinStudio勉強会 2014/09/08
 
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(1)-アーキテクチャ、データソース
 
Black jumbodogの新機能(webapi)~自動テストにおけるsmtpモックとして
Black jumbodogの新機能(webapi)~自動テストにおけるsmtpモックとしてBlack jumbodogの新機能(webapi)~自動テストにおけるsmtpモックとして
Black jumbodogの新機能(webapi)~自動テストにおけるsmtpモックとして
 
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
【18-C-5】C# で iOS/Androidアプリ開発 - Visual Studio 2015 + Xamarin + MVVMCross -
 
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
2 TomcatによるWebアプリケーションサーバ構築 第2章 Tomcat概要(2)-セッション
 
Visual Studio Tools for Unity
Visual Studio Tools for UnityVisual Studio Tools for Unity
Visual Studio Tools for Unity
 
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定
 
シルバーウィークにfacebookアプリを作成した
シルバーウィークにfacebookアプリを作成したシルバーウィークにfacebookアプリを作成した
シルバーウィークにfacebookアプリを作成した
 
Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてUnity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成について
 
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
 
DI(依存性注入)について
DI(依存性注入)についてDI(依存性注入)について
DI(依存性注入)について
 
Xamarin.forms実践投入してみて
Xamarin.forms実践投入してみてXamarin.forms実践投入してみて
Xamarin.forms実践投入してみて
 
Xamarin ~ iOS/Android/Windows アプリを C# で作ろう~
Xamarin ~ iOS/Android/Windows アプリをC# で作ろう~Xamarin ~ iOS/Android/Windows アプリをC# で作ろう~
Xamarin ~ iOS/Android/Windows アプリを C# で作ろう~
 
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaTomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
 
Xamarin によるクロスプラットフォームモバイルアプリ開発
Xamarin によるクロスプラットフォームモバイルアプリ開発Xamarin によるクロスプラットフォームモバイルアプリ開発
Xamarin によるクロスプラットフォームモバイルアプリ開発
 
C#とaop
C#とaopC#とaop
C#とaop
 
Xamarin 実戦投入時に気をつけたいことあれこれ
Xamarin 実戦投入時に気をつけたいことあれこれXamarin 実戦投入時に気をつけたいことあれこれ
Xamarin 実戦投入時に気をつけたいことあれこれ
 
がんばれガンプ ソルバルウを倒せ
がんばれガンプ ソルバルウを倒せがんばれガンプ ソルバルウを倒せ
がんばれガンプ ソルバルウを倒せ
 

Similar a Xamarin の救世主 Unity !

モバイルアプリの状態遷移を攻略したい!
モバイルアプリの状態遷移を攻略したい!モバイルアプリの状態遷移を攻略したい!
モバイルアプリの状態遷移を攻略したい!Tatsuji Kuroyanagi
 
.NET Standard で SQLServer と接続してみた
.NET Standard で SQLServer と接続してみた.NET Standard で SQLServer と接続してみた
.NET Standard で SQLServer と接続してみたm ishizaki
 
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしようわんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしようYasuhiko Yamamoto
 
名古屋SoftLayer x Bluemix Meetup
名古屋SoftLayer x Bluemix Meetup名古屋SoftLayer x Bluemix Meetup
名古屋SoftLayer x Bluemix MeetupKazumasa Sasazawa
 
【Unity道場スペシャル 2017京都】〜ブラウザアプリ・ネイティブアプリの複数プラットフォームのゲーム開発の現場〜
【Unity道場スペシャル 2017京都】〜ブラウザアプリ・ネイティブアプリの複数プラットフォームのゲーム開発の現場〜【Unity道場スペシャル 2017京都】〜ブラウザアプリ・ネイティブアプリの複数プラットフォームのゲーム開発の現場〜
【Unity道場スペシャル 2017京都】〜ブラウザアプリ・ネイティブアプリの複数プラットフォームのゲーム開発の現場〜Unity Technologies Japan K.K.
 
レスポンシブ対応 をサポートするプラグイン
レスポンシブ対応 をサポートするプラグインレスポンシブ対応 をサポートするプラグイン
レスポンシブ対応 をサポートするプラグインKawaji Masaki
 
Xamarin を使うとどんなことができるの?
Xamarin を使うとどんなことができるの?Xamarin を使うとどんなことができるの?
Xamarin を使うとどんなことができるの?Yoshito Tabuchi
 
作られては消えていく泡のように儚いクラスタの運用話
作られては消えていく泡のように儚いクラスタの運用話作られては消えていく泡のように儚いクラスタの運用話
作られては消えていく泡のように儚いクラスタの運用話Tsuyoshi Torii
 
xR Developerなら知っておきたいカメラの基礎知識
xR Developerなら知っておきたいカメラの基礎知識xR Developerなら知っておきたいカメラの基礎知識
xR Developerなら知っておきたいカメラの基礎知識Satoshi Maemoto
 
Visual Studio App Centerの始め方
Visual Studio App Centerの始め方Visual Studio App Centerの始め方
Visual Studio App Centerの始め方Shinya Nakajima
 
Xamarin 20141212 モバイルカフェスペシャル 「C#で作るiOS/Androidのクロスプラットフォームスマホアプリ開発」
Xamarin 20141212 モバイルカフェスペシャル 「C#で作るiOS/Androidのクロスプラットフォームスマホアプリ開発」Xamarin 20141212 モバイルカフェスペシャル 「C#で作るiOS/Androidのクロスプラットフォームスマホアプリ開発」
Xamarin 20141212 モバイルカフェスペシャル 「C#で作るiOS/Androidのクロスプラットフォームスマホアプリ開発」Yoshito Tabuchi
 
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternApplication Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternAtsushi Kambara
 
Visual Studio App Center Authの導入方法について
Visual Studio App CenterAuthの導入方法についてVisual Studio App CenterAuthの導入方法について
Visual Studio App Center Authの導入方法についてShinya Nakajima
 
Comcamp 2016 Okayama VSTS
Comcamp 2016 Okayama VSTSComcamp 2016 Okayama VSTS
Comcamp 2016 Okayama VSTSsady_nitro
 
Visual Studio App Centerで始めるCI/CD
Visual Studio App Centerで始めるCI/CDVisual Studio App Centerで始めるCI/CD
Visual Studio App Centerで始めるCI/CDShinya Nakajima
 
作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -
作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -
作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -Yasufumi Nishiyama
 
Computer Vision と Translator Text API 使ってみた
Computer Vision と Translator Text API 使ってみたComputer Vision と Translator Text API 使ってみた
Computer Vision と Translator Text API 使ってみたYoshito Tabuchi
 
【第1回EMS勉強会】Autopilot設計時のポイント
【第1回EMS勉強会】Autopilot設計時のポイント【第1回EMS勉強会】Autopilot設計時のポイント
【第1回EMS勉強会】Autopilot設計時のポイントyokimura
 

Similar a Xamarin の救世主 Unity ! (20)

モバイルアプリの状態遷移を攻略したい!
モバイルアプリの状態遷移を攻略したい!モバイルアプリの状態遷移を攻略したい!
モバイルアプリの状態遷移を攻略したい!
 
.NET Standard で SQLServer と接続してみた
.NET Standard で SQLServer と接続してみた.NET Standard で SQLServer と接続してみた
.NET Standard で SQLServer と接続してみた
 
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしようわんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
わんくま名古屋 #40 (20161217) Xamarinで自動化テストしよう
 
名古屋SoftLayer x Bluemix Meetup
名古屋SoftLayer x Bluemix Meetup名古屋SoftLayer x Bluemix Meetup
名古屋SoftLayer x Bluemix Meetup
 
【Unity道場スペシャル 2017京都】〜ブラウザアプリ・ネイティブアプリの複数プラットフォームのゲーム開発の現場〜
【Unity道場スペシャル 2017京都】〜ブラウザアプリ・ネイティブアプリの複数プラットフォームのゲーム開発の現場〜【Unity道場スペシャル 2017京都】〜ブラウザアプリ・ネイティブアプリの複数プラットフォームのゲーム開発の現場〜
【Unity道場スペシャル 2017京都】〜ブラウザアプリ・ネイティブアプリの複数プラットフォームのゲーム開発の現場〜
 
レスポンシブ対応 をサポートするプラグイン
レスポンシブ対応 をサポートするプラグインレスポンシブ対応 をサポートするプラグイン
レスポンシブ対応 をサポートするプラグイン
 
Xamarin を使うとどんなことができるの?
Xamarin を使うとどんなことができるの?Xamarin を使うとどんなことができるの?
Xamarin を使うとどんなことができるの?
 
作られては消えていく泡のように儚いクラスタの運用話
作られては消えていく泡のように儚いクラスタの運用話作られては消えていく泡のように儚いクラスタの運用話
作られては消えていく泡のように儚いクラスタの運用話
 
xR Developerなら知っておきたいカメラの基礎知識
xR Developerなら知っておきたいカメラの基礎知識xR Developerなら知っておきたいカメラの基礎知識
xR Developerなら知っておきたいカメラの基礎知識
 
Visual Studio App Centerの始め方
Visual Studio App Centerの始め方Visual Studio App Centerの始め方
Visual Studio App Centerの始め方
 
Xamarin 20141212 モバイルカフェスペシャル 「C#で作るiOS/Androidのクロスプラットフォームスマホアプリ開発」
Xamarin 20141212 モバイルカフェスペシャル 「C#で作るiOS/Androidのクロスプラットフォームスマホアプリ開発」Xamarin 20141212 モバイルカフェスペシャル 「C#で作るiOS/Androidのクロスプラットフォームスマホアプリ開発」
Xamarin 20141212 モバイルカフェスペシャル 「C#で作るiOS/Androidのクロスプラットフォームスマホアプリ開発」
 
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternApplication Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD Pattern
 
AppCenter
AppCenterAppCenter
AppCenter
 
DataTable
DataTableDataTable
DataTable
 
Visual Studio App Center Authの導入方法について
Visual Studio App CenterAuthの導入方法についてVisual Studio App CenterAuthの導入方法について
Visual Studio App Center Authの導入方法について
 
Comcamp 2016 Okayama VSTS
Comcamp 2016 Okayama VSTSComcamp 2016 Okayama VSTS
Comcamp 2016 Okayama VSTS
 
Visual Studio App Centerで始めるCI/CD
Visual Studio App Centerで始めるCI/CDVisual Studio App Centerで始めるCI/CD
Visual Studio App Centerで始めるCI/CD
 
作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -
作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -
作るツールから支えるツールへ - Movable Typeと外部システムの連携事例 -
 
Computer Vision と Translator Text API 使ってみた
Computer Vision と Translator Text API 使ってみたComputer Vision と Translator Text API 使ってみた
Computer Vision と Translator Text API 使ってみた
 
【第1回EMS勉強会】Autopilot設計時のポイント
【第1回EMS勉強会】Autopilot設計時のポイント【第1回EMS勉強会】Autopilot設計時のポイント
【第1回EMS勉強会】Autopilot設計時のポイント
 

Último

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 

Último (8)

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 

Xamarin の救世主 Unity !

  • 1. Xamarin の救世主 Unity! 2014/12/06(土) わんくま勉強会 東京 #93 @matatabi-ux クロスプラットフォーム開発 × DI コンテナのすすめ ゲーム開発ツール じゃない方
  • 2. お や く そ く 掲載内容は個人の私見であり、 所属組織の見解ではありません
  • 3. 自己紹介: 黒柳 達士(@matatabi-ux) • お仕事 ⁃ 某第二工場で Windows ストアアプリ大量生産中 ⁃ 拝承系 SIer → 安心簡単快適デザイン会社 → 現職 • 個人活動 ⁃ Blog: 「しっぽを追いかけて」 http://matatabi-ux.hateblo.jp ⁃ facebook: https://www.facebook.com/tatsuj.kuroyanagi ⁃ 日本人間工学会 認定人間工学専門家 UX 語れます ⁃ 飼い猫写真も垂れ流し中 twitter: https://twitter.com/burst_cafemocha facebook: https://www.facebook.com/burst.cafemocha しっぽもふもふの自宅警備ネコ 「モカ」
  • 4. 今回の目標とおことわり • 目標 ⁃ Xamarin でも使える強力な DI コンテナ Unity のご紹介 ⁃ Xamarin のクロスプラットフォーム開発で DI コンテナの活用方法を提案 • 注意事項 ⁃ ゲーム開発ツールの Unity じゃありません!一緒にしないで! ⁃ Xamarin は現在進行形で進化中なので仕様が大きく変わるかも ⁃ XAML をある程度知っている C# エンジニア視点でまとめました ⁃ Xamarin で使える Unity はプレリリース版
  • 5. おしながき • DI コンテナ Unity の概要 • Xamarin プロジェクトへの Unity 導入 • Xamarin × インスタンスの解決 • Xamarin × 依存関係の注入 • まとめ ※ この発表資料は SlideShare で公開します http://www.slideshare.net/tatsujkuroyanagi/xamarin-unity
  • 6. Unity DI コンテナ Unity の概要
  • 7. DI コンテナ Unity の概要 ビジネスアプリ開発用 「依存関係注入」 コンテナライブラリ ⁃ Microsoft patterns & practices チームが進めているプロジェクト成果物のひとつ ⁃ 軽量で柔軟性の高い DI コンテナとその実践パターンを提供 ⁃ Dependency Injection:依存関係注入とは実行時に外部からオブジェクトの振る舞いを決定する機能 Inversion of Control:制御の反転を 実現する有力な設計パターンのひとつ Instance Resolution Life Time Controll Constructor Injection Property Injection Method Injection
  • 8. Service B DI コンテナ Unity の概要 Service A Client Service B DI Container Client Service A Service Interface インスタンス生成サービス実装の解決 依存関係の注入 サービス利用 サービス利用 通常の設計(制御側がサービス実装に依存する) 依存関係注入の設計(サービス実装が制御側により決定される) Inversion of Control:制御の反転を実現する 「依存関係の注入」 ⁃ クライアントクラスからサービスクラスを利用する場合、クライアント側がサービス側の変更に影響を受けてしまう ⁃ サービスクラスは共通インタフェースを実装して内部実装を隠ぺいする ⁃ DI コンテナがクライアントインスタンスを生成しサービスクラスを渡すことで制御を反転させる
  • 9. DI コンテナ Unity の概要 DI コンテナ「Unity」が Xamarin の救世主となるワケ ⁃ C# の Xamarin 対応 PCL として提供されている DI コンテナ ⁃ もちろんライセンス形態は iOS、Android に利用できる Apache 2.0 ライセンス ⁃ Xamarin では各プラットフォームごとの処理記述が冗長になりやすい ⁃ Xamarin では共通コードに各プラットフォームごとの分岐処理が入り込みやすい Instance Resolution Life Time Controll Constructor Injection Property Injection Method Injection
  • 10. DI コンテナ Unity の概要 DI コンテナ「Unity」が Xamarin の救世主となるワケ ⁃ 冗長な処理記述 → 抽出したインタフェース実装で共通機能に集約される ⁃ 共通コードに分岐処理が入り込む → 分岐処理は DI コンテナが肩代わり ⁃ 共通処理と固有処理が整理され、クラス間の依存性が下がる iOS PCL / Shared Windows クラス間が密結合で、共通コードが各プラットフォームに依存 制御が反転し、共通コードがプラットフォーム依存から分離される Android iOS PCL / Shared Windows Androidコード 保守性 テスト 容易性 開発 生産性 コード 保守性 テスト 容易性 開発 生産性
  • 12. Xamarin プロジェクトへの Unity 導入 Shared プロジェクトの場合、共通 コードとプラットフォーム固有コードを 混在できるため Xamarin プロジェクトの作成 ⁃ Xamarin.Forms の PCL プロジェクトで作るのがおすすめ!
  • 13. Xamarin プロジェクトへの Unity 導入 Unity パッケージのインストール ⁃ Visual Studio からソリューションを選び NuGet パッケージマネージャを開く ⁃ 検索対象を「リリース前のパッケージを含める」にする ⁃ 「Unity」 で検索して Unity 3.5.1405-prerelease 以降を選択してインストールする 忘れやすいので注意! Visual Studio 2013 の場合 Visual Studio 2015 Preview の場合
  • 16. var container = new UnityContainer(); container.RegisterType<ITextSpeechService, TextSpeechService>( null, // 同一型で区別される登録名称(省略可能) new ContainerControlledLifetimeManager(), // インスタンスの生存管理方法(省略可能) new InjectionMember[], // 注入する依存関係設定(省略可能) ); var service = container.ResolveType<ITextSpeechService>(); Xamarin × インスタンスの解決 インタフェースとインスタンスの 型を指定 Unity を利用したインスタンスの解決 ⁃ 事前に RegisterType メソッドでクラスのインスタンス化時の振る舞いを登録 ⁃ ResolveType メソッドで登録された内容に応じてインスタンスが取得できる InjectionMember について は後述
  • 17. Xamarin × インスタンスの解決 指定できる LifetimeManager の種類 インスタンス共有範囲 インスタンスの生存期間 TransientLifetimeManager ※ 未指定時のデフォルト 共有なし(解決時に毎回生成) 生成後はコンテナには保持されない PerThreadLifetimeManager スレッド内で共有 明示的に破棄するまで(強い参照) ExternallyControlledLifetime Manager コンテナ内で共有 ガベージコレクションに回収されるまで (弱い参照) ContainerControlledLifetime Manager コンテナ内で共有 明示的に破棄するまで(強い参照)
  • 18. DEMO Xamarin × インスタンス の解決 ※このデモのソースコードは GitHub で公開中 https://github.com/matatabi-ux/XamarinUnityResolution
  • 20. Xamarin × 依存関係の注入 Unity で利用できる依存関係の注入機能(インスタンス生成時に注入) ⁃ コンストラクター注入 :Constructor Injection 利用するコンストラクタ、引数を変える ※ 引数に null は指定不可 既定で Unity で管理するクラスはインスタンス生成時にコンストラクター注入が自動で行われる ⁃ プロパティ注入 :Property Injection 生成されるインスタンスのプロパティ値を変える ※ 要 public Setter ⁃ メソッド呼び出し注入 :Method Call Injection 呼び出されるメソッド、引数を変える コンストラクタ、プロパティで指定できない private なメンバーの初期化には、メソッド 呼び出しの注入を利用するにゃ!
  • 21. Xamarin × 依存関係の注入 Unity の依存関係の注入の構成手法 構成の方法 主な特徴 構成ファイル ※今回は詳しい説明割愛 app.config ファイルで依存関 係を指定 構成ごとの柔軟な設定が簡単 コードによって追えない 残念ながら Xamarin では利用不可 実行時に指定 初期化処理コードの中で、 コードにより指定 コードの初期化子で柔軟な指定が可能 インテリセンス、コードによる追跡ができる 属性付与による宣言 インスタンス化するサービス クラスに属性を付与して宣言 静的な指定だがコード自動生成と相性がいい インテリセンス、コードによる追跡ができる サービスクラスを見ることで依存関係が見える
  • 22. コンストラクター注入 ⁃ 実行時の基本的な指定方法 ⁃ 属性での宣言方法 new InjectionConstructor(typeof(ITextSpeechService), “Speech Message”) Xamarin × 依存関係の注入 型か名称で、注入するパラメータ のインスタンスを指定 [InjectionConstructor] public PageViewModel( ITextSpeechService textService, [Dependency(“Speech Message”)] string message) InjectionConstructor の属性が優先されて利用される 指定がなかった場合は一番パラメータ数が多いものが優先 属性を省略した場合は型での解決、 指定した場合は名称で解決されます
  • 23. プロパティ注入 ⁃ 実行時の基本的な指定方法 ⁃ 属性での宣言方法 new InjectionProperty(“Text Service”), new InjectionProperty(“Message”, “Speech Message”), new InjectionProperty(“Logger”, new ResolvedParameter(typeof(ILogger), “FileLogger")) Xamarin × 依存関係の注入 [Dependency] public ITextSpeechService TextService { get; set; } [Dependency(“Speech Message”)] public string Message { get; set; } 引数を省略した場合は型での解決、指定 した場合は型&名称で解決される 引数を省略した場合は型での解決、指定 した場合は名称で解決される ResolvedParameter を指定することで型と 名称の組み合わせで解決することも
  • 24. メソッド呼び出し注入 ⁃ 実行時の基本的な指定方法 ⁃ 属性での宣言方法 new InjectionMethod(“Initialize”, typeof(ITextSpeechService), “Speech Message”, new ResolvedParameter(typeof(ILogger), “FileLogger")) Xamarin × 依存関係の注入 型か名称で、注入するパラメータ のインスタンスを指定 [InjectionMethod] public void Initialize( ITextSpeechService textService, [Dependency(“Speech Message”)] string message) InjectionMethod の属性が優先されて利用される 属性を省略した場合は型での解決、 指定した場合は名称で解決されます ResolvedParameter を指定することで型と 名称の組み合わせで解決することも
  • 25. DEMO Xamarin × 依存関係の注入 ※このデモのソースコードは GitHub で公開中 https://github.com/matatabi-ux/XamarinUnityInjection
  • 26. まとめ • Xamarin でこそ Unity を使うべき! ⁃ クロスプラットフォーム開発はプラットフォーム固有処理が冗長でクラス間が密結合になりがち ⁃ DI コンテナを利用することで、影響範囲を狭めた改修とテストしやすい実装ができる ⁃ Xamarin で利用する DI コンテナは Unity がおすすめ! • インスタンスの解決と依存関係の注入を使いこなそう ⁃ インスタンス解決と共有範囲と生存期間を設定できる ⁃ 利用できる注入の種類は、コンストラクタ、プロパティ、呼び出しメソッドの 3 種類 ⁃ 注入構成の方法は、構成ファイル、実行時の指定、属性による宣言の 3 種類 iOS PCL / Shared Windows Android
  • 27. 参考情報 • Microsoft patterns & practices - Unity プロジェクトページ https://unity.codeplex.com/ • Unity 3 MSDN(英語) http://msdn.microsoft.com/ja-jp/library/dn170416.aspx • @IT – 新しいオブジェクト生成機構で EntLib はこう変わる! http://www.atmarkit.co.jp/fdotnet/entlib/entlibv4/entlibv4_02.html Instance Resolution Life Time Controll Constructor Injection Property Injection Method Injection