More Related Content
Similar to Bait and switch (20)
More from m ishizaki (20)
Bait and switch
- 2. / 38
自己紹介
石崎 充良 ( @mishi_cs )
言語: C# XAML
活動:
JXUG (もくもく会) (connpass)
城東.NET Users Group (connpass)
.NET 読書会 (connpass)
2
- 4. / 38
Bait and Switch とは
・Xamarin で使うライブラリでよく使われている技法。
・共通コードからは個別のプラットフォームの機能を本来直接呼び出すことができない。
・これを個共通コードから個別のプラットフォームの機能を直接呼び出しているかのよ
うに扱える。
4
- 5. / 38
共通コード?
Android、iOS 対応のアプリを作る場合、
通常 3 つのプロジェクトが含まれたソリューションを作る。
■ ソリューション名プロジェクト
共通のコードを実装するプロジェクト。(コード共有)
■ ソリューション名.Droid プロジェクト
Android 用プロジェクト。Android 固有の機能も使える。
■ ソリューション名.iOS プロジェクト
iOS 用プロジェクト。iOS 固有の機能も使える。
5
全てのプラットフォームのプロ
ジェクトから参照される。
例えばここから Android 固有の
機能が使われていると、iOS で使
えなくなる。
- 21. / 38
ローカルの .nupkg を参照
・ nuget パッケージを探すソースを追加
21
「ソースの構成」を選択
.nupkg ファイルを保存した
フォルダーを選択
- 26. / 38
とりあえず .zip に変えてみて展開
26
共通コードプロジェクト
と各プラットフォームのフォルダー
各フォルダーに同じ名前の
.dll が含まれる
- 29. / 38
DLL を比較してみる
・nuget パッケージ内の DLL とアプリプロジェクト出力の DLL を比較してみる
・それぞれのフォルダー内の DLL をプラットフォーム毎に比較 (名前はリネーム)
※プラットフォーム間の比較
29
- 32. / 38
ソリューションの作成
■ App
Dll、DllA、DllB のいずれも直接参照しないアプリ(Library のみ参照)
■ AppA
Library と DllA を参照したアプリ
■ AppB
Library と DllB を参照したアプリ
■ Dll
空実装 DLL 役の DLL
■ DllA
プラットフォーム用 DLL 役の DLL その1
■ DllB
プラットフォーム用 DLL 役の DLL その2
■ Library
共通プロジェクト役の DLL
32上記ソリューションは https://github.com/m-ishizaki/BaSに上げてあります。
- 33. / 38
DLL 役の実装
Class1 というクラスに Name というプロパティを実装
33
プロジェクト毎にプロパティの値を変更
Dll では、Dll
DllA では、DllA
DllB では、DllB
- 36. / 38
実行結果
■ App の場合
■ AppA の場合
■ AppB の場合
36
App.Program Dll
AppA.Program DllA
AppB.Program DllB
実行時に使われる DLL が変わることが確認できた