Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在应用程序的整个生命周期内保持服务活动_C#_Xamarin_Mvvmcross - Fatal编程技术网

C# 在应用程序的整个生命周期内保持服务活动

C# 在应用程序的整个生命周期内保持服务活动,c#,xamarin,mvvmcross,C#,Xamarin,Mvvmcross,我有一个简单的服务接口,用于通过HTTP与服务器同步数据。服务接口具有启动和停止同步过程的方法。其思想是在用户登录后启动同步过程,并在用户注销前在应用程序结束时停止同步。同步服务将每隔几分钟检查一次新消息,然后使用MvxMessenger插件通知ViewModel新的/更改的数据 建议采用什么方法来确保应用程序期间的同步服务寿命?我目前正在使用一个定制的IMvxAppStart,它将服务接口注册为单例,然后保存对服务接口的静态引用。这是否足以让服务在应用程序的生命周期内保持活力,还是有更好的方法

我有一个简单的服务接口,用于通过HTTP与服务器同步数据。服务接口具有启动和停止同步过程的方法。其思想是在用户登录后启动同步过程,并在用户注销前在应用程序结束时停止同步。同步服务将每隔几分钟检查一次新消息,然后使用MvxMessenger插件通知ViewModel新的/更改的数据

建议采用什么方法来确保应用程序期间的同步服务寿命?我目前正在使用一个定制的IMvxAppStart,它将服务接口注册为单例,然后保存对服务接口的静态引用。这是否足以让服务在应用程序的生命周期内保持活力,还是有更好的方法

public class App : MvxApplication
{
    public override void Initialize()
    {
        ...
        RegisterAppStart(new CustomAppStart());
    }
}

public class CustomAppStart : MvxNavigatingObject, IMvxAppStart
{
    public static ISyncClient SynchronizationClient { get; set; }

    public void Start(object hint = null)
    {
        SynchronizationClient = Mvx.Resolve<ISyncClient>();
        ShowViewModel<SignInViewModel>();
    }
}

public interface ISyncClient
{
    void StartSync();
    void StopSync();

    bool IsSyncActive { get; }
}
公共类应用程序:MVX应用程序
{
公共覆盖无效初始化()
{
...
RegisterAppStart(新的CustomAppStart());
}
}
公共类CustomAppStart:MvxNavigatingObject,IMvxAppStart
{
公共静态ISyncClient同步客户端{get;set;}
公共无效开始(对象提示=null)
{
SynchronizationClient=Mvx.Resolve();
ShowViewModel();
}
}
公共接口ISyncClient
{
void StartSync();
void StopSync();
布尔是同义的{get;}
}

此操作不需要静态属性。当您将接口注册为单例时,IoC将为您完成这项工作。示例:在我们的一个应用程序中,我们需要一个状态属性,该属性包含应用程序整个生命周期的重要数据

需要此状态的模型仅使用以下代码段:

protected IApplicationState AppState
{
    get { return _appstate ?? (_appstate = Mvx.GetSingleton<IApplicationState>()); }
}
private IApplicationState _appstate;
受保护的IAApplicationState AppState
{
获取{return _appstate???(_appstate=Mvx.GetSingleton());}
}
私有IApplicationState\u appstate;
但是:您也可以使用静态属性来实现。但在这种情况下,在IoC中不需要单例值