MvvmCross REST服务体系结构

MvvmCross REST服务体系结构,rest,service,architecture,mvvmcross,crud,Rest,Service,Architecture,Mvvmcross,Crud,我有一个类似于github上mvvmcross教程实现的场景。我有这个BaseViewModel 公共类BaseViewModel:MvxViewModel { 受保护的void GeneralSyncLoad(字符串url、操作响应StreamHandler) { var request=WebRequest.Create(url); request.BeginGetResponse((结果)=>GeneralProcessResponse(请求、结果、响应StreamHandler),nul

我有一个类似于github上mvvmcross教程实现的场景。我有这个BaseViewModel

公共类BaseViewModel:MvxViewModel
{
受保护的void GeneralSyncLoad(字符串url、操作响应StreamHandler)
{
var request=WebRequest.Create(url);
request.BeginGetResponse((结果)=>GeneralProcessResponse(请求、结果、响应StreamHandler),null);
}
受保护的void GeneralRequestSendObjectAsync(IAsyncResult asynchronousResult、T objectToSend、Action responseStreamHandler)
{
var request=(HttpWebRequest)asynchronousResult.asynchState;
使用(var requestStream=request.EndGetRequestStream(asynchronousResult))
{
var serializer=newdatacontractjsonserializer(typeof(T));
var stream=newmemoryStream();
serializer.WriteObject(流,objectToSend);
Write(stream.ToArray(),0,stream.ToArray().Length);
}
BeginGetResponse(结果=>GeneralProcessResponse(请求、结果、响应StreamHandler)、请求);
}
私有void GeneralProcessResponse(WebRequest请求、IAsyncResult结果、Action responseStreamHandler)
{
var response=request.EndGetResponse(结果);
使用(var stream=response.GetResponseStream())
{
responseStreamHandler(流);
}       
}   
}
此类用于继承。继承的类使用此模式调用rest服务。例如TestListViewModel

公共类TestListViewModel:BaseViewModel
{
/*这里有一些代码*/
公共TestListViewModel()
{
异步加载();
}
私有void异步加载()
{
GeneralAsyncLoad(URL\u TESTLIST,ProcessResponse);
}
私有void ProcessResponse(流)
{
var jsonSerializer=新数据契约jsonSerializer(typeof(List));
var tlist=(列表)jsonSerializer.ReadObject(流);
List=tlist;
}
公共MvxCommand delete命令
{
获取{returnnewmvxcommand(dodelite,i=>i>0);}
}
专用异步void DoDelete(int-asTestID)
{
var request=WebRequest.Create(URL\u TESTDELETE);
request.Method=“DELETE”;
var asyncResult=request.BeginGetResponse(null,null);
EndGetResponse(异步结果);
异步加载();
}
}  
这一切都很好,但我并不满意。在mvvmcross中使用REST服务有更好的解决方案吗?
最近我读了一篇关于mvvmcross插件(网络插件)的文章,但我没有在网上找到任何例子。
是否有任何nugget软件包需要下载,或者我是否应该编写自己的IMvxRestClient和IMvxJsonRestClient实现?

最后,我的目的是将数据访问功能与实现分离。

wiki中有一些插件示例——或者更多的库现在支持PCL,例如HttpClient、Json.Net、RestSharp、,etc@Stuart,我偷看了N-06的代码,并从SimpleRestService扩展了代码。我在维基上读了插件文章,但找不到一个实现网络的具体例子。
public class BaseViewModel : MvxViewModel
{
    protected void GeneralAsyncLoad(string url, Action<Stream> responseStreamHandler)
    {
        var request = WebRequest.Create(url);
        request.BeginGetResponse((result) => GeneralProcessResponse(request, result, responseStreamHandler), null);     
    }
    protected void GeneralRequestSendObjectAsync<T>(IAsyncResult asynchronousResult, T objectToSend, Action<Stream> responseStreamHandler)
    {
        var request = (HttpWebRequest)asynchronousResult.AsyncState;
        using (var requestStream = request.EndGetRequestStream(asynchronousResult))
        {
            var serializer = new DataContractJsonSerializer(typeof(T));
            var stream = new MemoryStream();
            serializer.WriteObject(stream, objectToSend);
            requestStream.Write(stream.ToArray(), 0, stream.ToArray().Length);
        }
        request.BeginGetResponse(result => GeneralProcessResponse(request, result, responseStreamHandler), request);    
    }
    private void GeneralProcessResponse(WebRequest request, IAsyncResult result, Action<Stream> responseStreamHandler)
    {
        var response = request.EndGetResponse(result);
        using (var stream = response.GetResponseStream())
        {
            responseStreamHandler(stream);
        }       
    }   
}
public class TestListViewModel : BaseViewModel
{
    /* Some code here */
    public TestListViewModel()
    {
        AsyncLoad();
    }
    private void AsyncLoad()
    {
        GeneralAsyncLoad(URL_TESTLIST, ProcessResponse);
    }
    private void ProcessResponse(Stream stream)
    {
        var jsonSerializer = new DataContractJsonSerializer(typeof(List<TestDataViewModel>));
        var tlist = (List<TestDataViewModel>)jsonSerializer.ReadObject(stream);

        List = tlist;
    }

    public MvxCommand<int> DeleteCommand
    {
        get { return new MvxCommand<int>(DoDelete, i => i > 0); }
    }
    private async void DoDelete(int asTestID)
    {
        var request = WebRequest.Create(URL_TESTDELETE);
        request.Method = "DELETE";

        var asyncResult = request.BeginGetResponse(null, null);
        request.EndGetResponse(asyncResult);

        AsyncLoad();
    }
}