

Xamarin.iOSとXamarin.Androidにそれぞれ機能が同じclassが実装されています。  
このclassは各デバイスの特性に応じて若干実装方法は異なっております。  
これらclassをPCLから参照し、instance生成を行おうと思っております。

しかし、実装及びcompile時に上記classのありかが見つからないとの理由で  
エラーになります。  
PCLの各リソースをXamarin.iOS及びXamarin.Androidのリソースから  
参照することができますが、この逆はできないのでしょうか？  
もしご存知でしたら、ご教授のほどお願い致します。


CC BY-SA 3.0
2016-07-03T06:08:30.563
27292
2016-07-03T12:10:00.310
9561
question
ios android c# xamarin
Xamarin.iOS及びXamarin.AndroidのclassをPCLから参照する方法


こちら、

  * [C# - C# Xamarin.FormsのDependencyServiceの代替え(36951)｜teratail](https://teratail.com/questions/36951)

の回答が参考になるかと思います。

が、この方法は「インスタンスの生成は Android または iOS 側で行わせ、生成されたインスタンスの共通なインターフェースを PCL
側で使用する」というものであるため、

> これらclassをPCLから参照し、instance生成を行おうと思っております

の目的とは合わないかも知れません。  
（厳密には、PCL側から、各プラットフォーム側にあるクラスのインスタンス生成を行うことは不可能です。）

上記以外の方法としては、「Bait and Switch」と呼ばれるテクニックがあります。

これは、全く同じ名称のアセンブリ(DLLファイル名)・クラスを、PCLプロジェクトから参照する用と、Androidプロジェクトから参照する用、iOSプロジェクトから参照する用に３つ用意し、

  1. PCLプロジェクトから参照する用は何も実装しない
  2. Androidプロジェクトから参照する用はAndroid固有の実装を行う
  3. iOSプロジェクトから参照する用はiOS固有の実装を行う

とし、PCLプロジェクトは１.を、Androidプロジェクトには２．を、iOSプロジェクトには3.を参照設定します。

すると、Androidアプリとして実行するときは2.で実装したクラスが使われ、iOSアプリとして実行するときは３．が使用されるため、「見かけ上」、各プラットフォーム固有の実装がPCLから呼び出せているように見えます。

このテクニックに関しては、以下のリンクが詳しいので、参考にしてください。

  * [Plugins for Xamarinを作ろう！ - ぴーさんログ](http://ticktack.hatenablog.jp/entry/2016/04/08/180321)
  * [共有コードからネイティブ依存処理が使える！PCLを使ったXamarinライブラリ作成テクニック (フェンリル | デベロッパーズブログ)](http://blog.fenrir-inc.com/jp/2015/12/xamarin_plugin.html)


CC BY-SA 3.0
2016-07-03T12:10:00.310
27300
2016-07-03T12:10:00.310
15190
27292
answer