Это один из способов, которым я смог достичь своей цели. Я не уверен, что это правильный способ сделать это.
Как я достиг своей цели, используя EventHandler.
Создание интерфейса (IAncSubscriberWrapper) для класса AncSubscriberWrapper
public interface IAncSubscriberWrapper
{
event EventHandler UnshownNotificationCounterUpdated;
}
и реализует его как показано ниже
public class AncSubscriberWrapper : NotificationCenterFacade, IAncSubscriberWrapper
Затем реализуйте элемент интерфейса внутри класса AncSubscriberWrapper
public event EventHandler UnshownNotificationCounterUpdated;
, а также вызывать метод внутри метода OnUnshownCounterUpdatedAsync
public Task OnUnshownCounterUpdatedAsync(long counter)
{
UnshownNotificationCounterUpdated?.Invoke(this, null);
return Task.CompletedTask;
}
Затем перейдите в BasePageViewModel, зарегистрируйте и отмените регистрацию слушателей.
public void Initialize()
{
m_ancSubscriberWrapper.UnshownNotificationCounterUpdated += OnUnshownNotificationCounterUpdated;
}
public void Teardown()
{
m_ancSubscriberWrapper.UnshownNotificationCounterUpdated -= OnUnshownNotificationCounterUpdated;
}
Поскольку BasePageViewModel является абстрактным классом, который когда-либо конкретный класс, который его использует, будет переопределять методы. (Следующий фрагмент кода не имеет прямого отношения к этому вопросу, но для понимания дизайна на основе моего кода)
/*
* BaseContainerViewController is only accepting TPageViewModel generic type of classes only.
* TPageViewModel inherits BasePageViewModel and BaseContainerViewController inherits BaseViewController
* That's what following line is all about
*/
public abstract class BaseContainerViewController<TPageViewModel> : BaseViewController where TPageViewModel : BasePageViewModel
и
public class WardListViewController : BaseContainerViewController<WardListPageViewModel>
Вернуться к заключительной части ответа. Добавьте следующий метод в класс BasePageViewModel, и он завершит процесс.
protected virtual void OnUnshownNotificationCounterUpdated(object sender, EventArgs eventArgs)
{
GetUnseenNotificationsCount();
}