2017-08-04 1 views
-2

Wie kann ConnectionManager die exspirationRegistrationId abrufen, die in der AndroidPush-Klasse erfasst wurde?Wie verbinde ich Ereignisse, die auf eine referenzierte Lösung gefeuert werden

Mache ich das falsch?

Irgendwelche Vorschläge, wie ich meine Lösung verbessern kann?

Gibt es irgendein Muster, dem ich folgen könnte?

Lösung: Manager

public class ConnectionManger 
{ 
    private readonly IPushManager pushManager = new PushManager(); 

    public void NotifyAppUser(List<PushNotificationSubscription> regIds, Alert alert) 
    { 
     pushManager.PushNotification(regIds, alert); 
     var expiredRegistrationId = ?? 

    } 
} 

Lösung: PushNotification

public class PushManager : IPushManager 
    { 

     public void PushNotification(List<PushNotificationSubscription> registeredPhone, Alert alert) 
     { 

      AndroidPush androidPush = new AndroidPush(); 
      androidPush.Push(alert, registeredPhone); 

     }  

    } 


    public class AndroidPush : IPushNotificationStrategy 
    { 

     public void Push(Alert alert, List<string> registrationIds) 
     { 

      // Wait for GCM server 
      #region GCM Events 
      gcmBroker.OnNotificationFailed += (notification, aggregateEx) => 
      { 

       var expiredRegistrationId = aggregateEx.OldId; 
       Q: How do i pass expiredRegistrationId to ConnectionManager class? 
      }; 

     } 



    } 
+0

Ad eine gescheiterte Immobil zu der Klasse ConnectionManager, so dass es durch den Event-Handler gesetzt werden kann. – jdweng

+0

Wenn ich dem ConnectionManager eine fehlgeschlagene Eigenschaft hinzufüge, kann AndroidPush diese Eigenschaft nicht festlegen, da sie von ConnectionManager referenziert wird und einen Zirkelverweis verursacht. –

+0

Sie müssen eine Instanz der Klasse verwenden. – jdweng

Antwort

0

Sie .NET als gemeinsamer Spielplatz so gibt es mehrere Optionen

Unter der Annahme:

  • Sie von Lösungen bedeuten getrennte dll's
  • Sie (aus der ursprünglichen Frage)
  • Ihr Code halten gcmBroker am Leben, so dass die OnNotificationFailed Ereignis
abfeuern kann eine Liste von Strings zurückgeben müssen

dann sollte diese Arbeit:

Ihre Unterschrift Wechsel in der IPushNotificationStrategy Schnittstelle zu

List<string> Push(Alert alert, List<string> registrationIds) 

Fügen Sie diese Veranstaltung zu Ihrem IPushManager Schnittstelle:

event Action<List<string>> ExpiredRegs; 

dieses Ereignis aus PushManager implementieren und rufen:

public event Action<List<string>> ExpiredRegs; 

// call this when Push returns some expiredRegs : 
void OnExpiredRegs(List<string> expiredRegs) => ExpiredRegs?.Invoke(expiredRegs); 

die Veranstaltung Abonnieren in ConnectionManger:

pushManager.ExpiredRegs += OnExpiredRegs; 

void OnExpiredRegs(List<string> expiredRegs) 
{ 
    // whatever you need to do 
} 
Verwandte Themen