KJ3*_*KJ3 1 c# android xamarin.ios xamarin xamarin.forms
我一直在四处和周围小时,存储在Xarmarin.Forms PCL应用非常基本信息的一个看似简单的任务.我想做的就是让用户在Entry字段中输入一个东西,然后将其保存到Android和IOS设备.
我看到的一切都无法在Xamarin Studio中工作(例如安装nuget包).
使用共享PCL项目执行文件I/O比您预期的要复杂一点; 核心Xamarin Forms框架没有公开任何用于执行此操作的System.IO类,这可能会让您一开始感到困惑.如果你仔细想一想,它会产生一定的意义; 毕竟,每个平台都将拥有自己的I/O基础架构实现.但是,当你所要做的就是写一个哔哔的文件时,这并没有让你感到沮丧.
这是DependencyService的用武之地!Xamarin Forms框架的设计者理解人们希望在共享程序集中编写代码,但仍需要访问特定于平台的实现,例如低级文件访问.为了支持这个用例,Xamarin Forms公开了一个简单的MEF类依赖注入框架,允许您通过归属注册接口的实现.
DependencyService框架有一个简单的方法:在程序集中定义一个接口,该接口将由特定于平台的代码(Android,iOS,WinPhone项目)引用,在特定于平台的asssemblies中定义实现类,并注册实现类Dependency属性(有关更多信息,请参阅Xamarin文档).
对于一个简单的项目,共享的PCL将没问题.在更复杂的项目中,我建议使用包含接口,共享类型等的专用"Common"程序集.在这种情况下,我们可以定义一个公开一些简单功能的接口:
using System;
namespace MyDemo
{
public interface IFileService
{
void WriteData(String data);
String ReadData();
}
}
Run Code Online (Sandbox Code Playgroud)
接下来,我们将为Android和iOS平台创建一个实现.创建一个实现该接口的类.它具有无参数构造函数非常重要,因为DependencyService当前不提供传递任何构造函数参数的方法:
namespace MyDemo
{
public class FileService : IFileService
{
public FileService()
{
}
public void WriteData(String data)
{
string filePath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.Personal),
"Data.txt");
System.IO.File.WriteAllText(filePath, data);
}
public String ReadData()
{
string filePath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.Personal),
"Data.txt");
var data = System.IO.File.ReadAllText(filePath);
return data;
}
}
}
Run Code Online (Sandbox Code Playgroud)
最后,添加一个导出此实现的属性:
[assembly: Xamarin.Forms.Dependency(typeof(MyDemo.FileService))]
namespace MyDemo
{
public class FileService : IFileService
...
Run Code Online (Sandbox Code Playgroud)
将Dependency属性放在名称空间声明之外是非常重要的; 即使你已经做了一切正确的事情,你仍然可以试着理解为什么你会得到空引用.
最后,在共享项目的代码中,使用DependencyService在运行时解析实现:
var fileService = DependencyService.Get<IFileService>();
fileService.WriteData("Hello!");
var data = fileService.ReadData();
System.Diagnostics.Debug.WriteLine(data);
Run Code Online (Sandbox Code Playgroud)
显然,你会想要比我的例子更高级的东西,但这应该让你开始.
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
1015 次 |
| 最近记录: |