Код: Выделить всё
///
/// Sync agent. It's the sync orchestrator
/// Knows both the Sync Server provider and the Sync Client provider.
///
public class SyncAgent
{
private readonly IUnitOfWork _unitOfWork;
public SyncAgent(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
public async Task SynchronizeAsync()
{
Debug.WriteLine("Test saved change");
// get syncronizable entities
//var result = await _unitOfWork.GetSyncableItemsAsync();
}
}
public class UnitOfWork : IUnitOfWork
{
public event EventHandler EntitySaved;
public async Task SaveChangesAsync()
{
// saving stuff
// ...
// fire event
EntitySaved?.Invoke(this, new EventArgs());
}
}
public class RemoteSyncHandler
{
private readonly SyncAgent _syncAgent;
public RemoteSyncHandler(SyncAgent syncAgent)
{
_syncAgent = syncAgent;
}
public void OnChangesSaved(object sender, EventArgs e)
{
_syncAgent.SynchronizeAsync().SafeFireAndForget();
}
}
// in the the Ioc
services.AddScoped();
services.AddScoped();
services.AddScoped(provider =>
{
var handler = new RemoteSyncHandler(provider.GetRequiredService());
var unitOfWork = provider.GetRequiredService();
// Subscribe to the ChangesSaved event
unitOfWork.EntitySaved += handler.OnChangesSaved;
return handler;
});
Код: Выделить всё
var uow = new UnitOfWork();
var syncAgent = new SyncAgent(uow);
uow.EntitySaved += syncAgent.OnChangesSaved;
Каковы альтернативные способы уведомить агент синхронизации о начале синхронизации? Я также хочу, чтобы процесс синхронизации выполнялся в фоновом режиме, не блокируя пользовательский интерфейс, например event и SafefireandForget.
Подробнее здесь: https://stackoverflow.com/questions/793 ... -correctly
Мобильная версия