私はXarmarinを試してみることにしました。私はアンドロイドのコンテキストを渡したいと思います。
直接は、アンドロイドを渡しますか?いいえ、それをする方法はありません。インタフェースはPCLで定義されていますが、コンテキストインスタンスを受け入れるための適切なコンテナ(タイプ)がPCLにありません。
しかし、あなたは活用し、コンテキストインスタンスに独自のインタフェースとクラスを定義することができます:あなたが投稿ブログのデモに基づいて
例(資産フォルダ内のtxt
ファイルを読むためにコンテキストを活用):
- は
Assets
フォルダにtxtファイル(abc.txt)を追加し、それがAndroidAssets
としてBuildAction
だし。
はPCLに新しいインタフェースを定義します。
public interface IContextUtility
{
string GetAssetTxt(string str);
}
がMainViewModel.cs
にIContextUtilityの変数を追加します。
public class MainViewModel
{
private readonly IPlatform _platform;
private readonly ISettings _settings;
private readonly IContextUtility _contextUtility;
public MainViewModel (IPlatform platform, ISettings settings,IContextUtility contextUtility)
{
_settings = settings;
_platform = platform;
_contextUtility = contextUtility;
}
public string Abc
{
get {
return _contextUtility.GetAssetTxt("abc.txt");
}
}
...
}
は、AndroidプロジェクトにIContextUtility
実装を追加します。
public class MyContextUtility : IContextUtility
{
public string GetAssetTxt(string str)
{
string strToReturn = null;
using (var stream = Application.Context.Assets.Open(str))
{
using (StreamReader reader = new StreamReader(stream))
{
strToReturn=reader.ReadToEnd();
}
}
return strToReturn;
}
}
新規登録App.cs
でのスタンス:今すぐ
[Application(Icon="@drawable/icon", Label="@string/app_name")]
public class App : Application
{
public static IContainer Container { get; set; }
public App(IntPtr h, JniHandleOwnership jho) : base(h, jho)
{
}
public override void OnCreate()
{
var builder = new ContainerBuilder();
builder.RegisterInstance(new MyContextUtility()).As<IContextUtility>();
...
}
}
、あなたはあなたのMainActivityでそれを使用することができます。たとえばありがとう:エルビス・夏-msftを@
var text = viewModel.Abc;
を。私がこの権利を読んだら、あなたはそれができないと言っています。上の例では、アプリケーション[コンテキスト]の周りにコード/クラス/実装を構築することに注意してください。 – KellyTheDev
また....私がやろうとしていることの1つは、クラスを 'Android.App.Service'に挿入することです。この場合、デフォルトのコンストラクタが必要であることが警告されます – KellyTheDev