質問の趣旨としては以下と解釈して良いでしょうか?
- Xamarin.Nativeで開発をしたい(している)
- AndroidとiOSなどの間でコードを共有化したい
- 共通化コードはPortableなプロジェクトを利用したい(している)
- 共通化コードからプラットフォーム依存する機能を利用したい
だったとすると正道な解決策は、ちょっと面倒ですが次の手順で対応する必要があると思います。
- プラットフォーム依存の処理を実施するインターフェースをPortableプロジェクトに定義する
- インターフェースの実装クラスをそれぞれのNativeプロジェクト下に作成する(.Droidや.iOS)
- Nativeプロジェクト側で実装クラスをインスタンス化して、Portableプロジェクトに渡して処理を実施させる
3.の辺りはamay077さんが仰るように、DIコンテナなんかを使うと楽できるかもしれません。
ものによっては仰々しいだけになってしまう可能性もありますが。
この辺りの情報はXLsoftの方が公式のドキュメントを翻訳してくださっていますので、あわせてこちらも参考にされてみてください。
http://www.xlsoft.com/jp/products/xamarin/portable_class_libraries.html
公式のドキュメントはこちら
https://developer.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications/sharing_code_options/
またもう少し簡単にするには、PortableではなくSharedプロジェクトで共通処理を書く方法もあります。
こちらはコンパイラオプションで切り替えられるので共通コード内に個別処理が書けるので、DIなんぞ?って方は、そちらのほうがとっつきやすいかもしれません。
あと実際に動作確認はしていませんが、UIをXamarin.Formsで書かなくても、Formsの初期化処理だけしておけばDependencyServiceを利用できる可能性はあります。
ただ、裏技的な利用方法なので今動いても、どこまで動作保障されるかは分からないのでお勧めできません。
以上です。
少しでも参考になれば幸いです。
[2016.06.13 21:02追記]
文字で書いても分かりにくかったので、簡単なサンプルを書いてみました。
AndroidのMainActivityから追ってみてください。
なおAndroidしか書いていません。。。
https://github.com/nuitsjp/XamarinSamples
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/19 09:57