3

Xamarin フォーム プロジェクトに Freshmvvm を使用しています。カメラを使用しており、プラットフォーム固有の機能を使用したいと考えています。そのため、IOC コントロールを使用してプラットフォーム固有の機能を使用するにはどうすればよいか考えていました。

Freshmvvm.FreshIOC.Container.Register<ICamera,Camera>();

このコードを App クラスから呼び出す場合、iOS と Android の両方のプロジェクトでカメラ クラスを使用する必要がありますか? はいの場合、特定のプラットフォームのカメラ クラスを実装する必要があることをアプリ クラスに知らせるにはどうすればよいですか? または、IOC コントロールを使用して、使用したいときにページ モデル (ビュー モデル) のコンストラクターにインターフェイスを挿入するより良い方法はありますか?

4

3 に答える 3

4

あなたが求めているのはDependency Serviceだと思います。これにより、ネイティブ機能にアクセスできます。

この方法では、たとえば、共有コードでインターフェイスを作成する必要がありますICamera

public interface ICamera
{
   void TakePicture();
}

これで、このインターフェイスをプラットフォーム固有のプロジェクトに実装できます。

たとえば、iOS では次のように実装できます。

public class CameraImplementation : ICamera { public void TakePicture() { // iOS コードはこちら } }

ここで重要なのは、これをどのように登録するかです。これを行うには、次のように、プラットフォーム固有の実装の名前空間の上に次のようなタグを追加します。

[assembly: Xamarin.Forms.Dependency (typeof (CameraImplementation))]
namespace yourapp
{
   // CameraImplementation class here
}

アンドロイドも同様です。名前をそのままにしておく場合は、このタグをコピーして貼り付けることもできます。

于 2016-09-14T20:13:59.710 に答える