質問: Visual Studio 2015 C# .Net 4.5 上記でAndroidとiOSのクロスプラットフォーム開発をしています。 共有のクラスから、各プラットフォームの固有の機能を呼び出したくて ネットを調べたら、 「Xamarin.Formsからプラットフォーム固有の機能を利用するには?(DependencyService利用)」 というのが見つかったのですが、 Xamarin.FormsのDependencyServiceを使わずにNativeで同じことはできないでしょうか? 現在、VSの「新しプロジェクト」から「C#」「Cross-Platform」を選択し 「Blank App(Native Portable)」を使って作成をしていますので、 Xamarin.Formsは使っていない状態です。 もしかしてXamarin.Formsでやり直すしかないでしょうか? よろしくお願いします。
回答: 質問の趣旨としては以下と解釈して良いでしょうか? * Xamarin.Nativeで開発をしたい(している) * AndroidとiOSなどの間でコードを共有化したい * 共通化コードはPortableなプロジェクトを利用したい(している) * 共通化コードからプラットフォーム依存する機能を利用したい だったとすると正道な解決策は、ちょっと面倒ですが次の手順で対応する必要があると思います。 1. プラットフォーム依存の処理を実施するインターフェースをPortableプロジェクトに定義する 2. インターフェースの実装クラスをそれぞれのNativeプロジェクト下に作成する(.Droidや.iOS) 3. Nativeプロジェクト側で実装クラスをインスタンス化して、Portableプロジェクトに渡して処理を実施させる 3.の辺りはamay077さんが仰るように、DIコンテナなんかを使うと楽できるかもしれません。 ものによっては仰々しいだけになってしまう可能性もありますが。 この辺りの情報はXLsoftの方が公式のドキュメントを翻訳してくださっていますので、あわせてこちらも参考にされてみてください。 公式のドキュメントはこちら またもう少し簡単にするには、PortableではなくSharedプロジェクトで共通処理を書く方法もあります。 こちらはコンパイラオプションで切り替えられるので共通コード内に個別処理が書けるので、DIなんぞ?って方は、そちらのほうがとっつきやすいかもしれません。 あと実際に動作確認はしていませんが、UIをXamarin.Formsで書かなくても、Formsの初期化処理だけしておけばDependencyServiceを利用できる可能性はあります。 ただ、裏技的な利用方法なので今動いても、どこまで動作保障されるかは分からないのでお勧めできません。 以上です。 少しでも参考になれば幸いです。 [2016.06.13 21:02追記] 文字で書いても分かりにくかったので、簡単なサンプルを書いてみました。 AndroidのMainActivityから追ってみてください。 なおAndroidしか書いていません。。。