質問: Xamarin.iOSとXamarin.Androidにそれぞれ機能が同じclassが実装されています。 このclassは各デバイスの特性に応じて若干実装方法は異なっております。 これらclassをPCLから参照し、instance生成を行おうと思っております。 しかし、実装及びcompile時に上記classのありかが見つからないとの理由で エラーになります。 PCLの各リソースをXamarin.iOS及びXamarin.Androidのリソースから 参照することができますが、この逆はできないのでしょうか? もしご存知でしたら、ご教授のほどお願い致します。
回答: こちら、 * C# - C# Xamarin.FormsのDependencyServiceの代替え(36951)|teratail の回答が参考になるかと思います。 が、この方法は「インスタンスの生成は Android または iOS 側で行わせ、生成されたインスタンスの共通なインターフェースを PCL 側で使用する」というものであるため、 > > これらclassをPCLから参照し、instance生成を行おうと思っております > > > の目的とは合わないかも知れません。 (厳密には、PCL側から、各プラットフォーム側にあるクラスのインスタンス生成を行うことは不可能です。) 上記以外の方法としては、「Bait and Switch」と呼ばれるテクニックがあります。 これは、全く同じ名称のアセンブリ(DLLファイル名)・クラスを、PCLプロジェクトから参照する用と、Androidプロジェクトから参照する用、iOSプロジェクトから参照する用に3つ用意し、 1. PCLプロジェクトから参照する用は何も実装しない 2. Androidプロジェクトから参照する用はAndroid固有の実装を行う 3. iOSプロジェクトから参照する用はiOS固有の実装を行う とし、PCLプロジェクトは1.を、Androidプロジェクトには2.を、iOSプロジェクトには3.を参照設定します。 すると、Androidアプリとして実行するときは2.で実装したクラスが使われ、iOSアプリとして実行するときは3.が使用されるため、「見かけ上」、各プラットフォーム固有の実装がPCLから呼び出せているように見えます。 このテクニックに関しては、以下のリンクが詳しいので、参考にしてください。 * Plugins for Xamarinを作ろう! - ぴーさんログ * 共有コードからネイティブ依存処理が使える!PCLを使ったXamarinライブラリ作成テクニック (フェンリル | デベロッパーズブログ)