Почему событие не запускается правильно?C#

Место общения программистов C#
Ответить
Anonymous
 Почему событие не запускается правильно?

Сообщение Anonymous »

У меня есть приложение на Мауи, которое использует Entity Framework (EF) SQLite с шаблоном единицы работы. Я хочу запускать событие всякий раз, когда данные добавляются, обновляются или удаляются, а изменения сохраняются. Это событие должно вызвать метод агента синхронизации для запуска локальной и удаленной синхронизации. Однако точка останова для этого события не достигается. Что я делаю не так?

Код: Выделить всё

/// 
/// 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;
});
Единица работы внедряется в модели представления для выполнения операций CRUD. В текущей реализации я попытался соединить единицу работы и агент синхронизации без правильной инициализации агента синхронизации, как показано ниже:

Код: Выделить всё

var uow = new UnitOfWork();
var syncAgent = new SyncAgent(uow);
uow.EntitySaved += syncAgent.OnChangesSaved;
Что я делаю не так?
Каковы альтернативные способы уведомить агент синхронизации о начале синхронизации? Я также хочу, чтобы процесс синхронизации выполнялся в фоновом режиме, не блокируя пользовательский интерфейс, например event и SafefireandForget.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -correctly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»