我有一个便携式类库,我将用于Windows 8和手机应用程序。所以我创建了一个通用的viewmodeland,现在我想在viewmodels中处理存储功能。我找到了一个PCLStorage包,用于处理这种情况。
我在Windows 8上有这样的代码,现在我想用PCLStorage在PCL中写这个。
public static object LoadSettings(string key)
{
if (Windows.Storage.ApplicationData.Current.LocalSettings.Values.ContainsKey(key))
{
if (Windows.Storage.ApplicationData.Current.LocalSettings.Values[key] != null)
{
return Windows.Storage.ApplicationData.Current.LocalSettings.Values[key];
}
else
{
return null;
}
}
else
{
return null;
}
}
我找到了一种方法,我在viewmodel中创建了一个用于存储的接口。并创建了一个类来处理各个项目中的电话和城域存储。当我创建MainViewModel的对象时,我也传递存储对象。
所以我想知道,这是对的吗?
答案 0 :(得分:1)
我认为最简单的模式是在容器引导程序中注册当前平台 - 被告 - 实现特定的' '壳' for platform并获取构造函数中的依赖项 或者只是跳过IoC并手动实例化东西
using MyInfrastructureAssembly.Interfaces;
public MyApp: App // MyNewPlatFormApp
{
public override Initiaze()
{
var bootsrapper = new Boostrapper(MyIoC.Current);
}
}
public class Bootsrapper: TheBootStrapperOfMyIoc
{
public Bootsrapper(IocContainer container)
{
Container = container;
}
public override Register()
{
Container.Register<IMyAbstractedService,MyPlatformDependantService>();
}
}
MyPlatformDependantService : IMyAbstractedService
{
public object Get(); // IMyAbstractedService.Get()
}
public class MyViewModel:ViewModelBase
{
IMyService MyService {get;set;}
MyViewModel(IMyAbstractedService myServcice)
{
MyService = myService;
}
public object Thing // LazyThing provided by IMyAbstractedService
{
get
{
if(_thing!=null)
return _thing;
return _thing = GetIt();
}
set
{
if(Equals(value,_thing)) return;
_thing = value;
base.NotifyMagicalChanges()
}
}
public void GetIt()
{
MyServcie.Get();
}
}
静态版:在LinqPad
上运行enter code here
private async void CheckIfExist()
{
try
{
var isoStore = FileSystem.Current.LocalStorage;
var folder = await isoStore.CreateFolderAsync("xxx",
CreationCollisionOption.ReplaceExisting);
ExistenceCheckResult result = await isoStore.CheckExistsAsync("xxx");
switch (result)
{
case (ExistenceCheckResult.FolderExists):
Console.WriteLine(":)"); break;
case (ExistenceCheckResult.NotFound):
Console.WriteLine(":("); break;
}
}
catch (Exception)
{
Console.WriteLine(":<");
}
}'
答案 1 :(得分:0)
我找到了一种方法,我在viewmodel中创建了一个用于存储的接口。并创建了一个类来处理各个项目中的电话和城域存储。当我创建MainViewModel的对象时,我也传递存储对象。所以我想知道这是对的吗?
是的,这是一个很好的解决方案。 Dan的答案与使用IoC容器基本相同。
您还可以尝试使用Xam.Plugins.Settings库,它基本上用于设置PCL存储为文件IO执行的操作。