C# 如何关联在引用的解决方案上触发的事件
ConnectionManager如何获取AndroidBush类中捕获的expiredRegistrationId 我这样做不对吗 关于如何改进我的解决方案,有什么建议吗 有什么我可以遵循的模式吗 解决方案:经理C# 如何关联在引用的解决方案上触发的事件,c#,events,delegates,eventhandler,C#,Events,Delegates,Eventhandler,ConnectionManager如何获取AndroidBush类中捕获的expiredRegistrationId 我这样做不对吗 关于如何改进我的解决方案,有什么建议吗 有什么我可以遵循的模式吗 解决方案:经理 public class ConnectionManger { private readonly IPushManager pushManager = new PushManager(); public void NotifyAppUser(List<Push
public class ConnectionManger
{
private readonly IPushManager pushManager = new PushManager();
public void NotifyAppUser(List<PushNotificationSubscription> regIds, Alert alert)
{
pushManager.PushNotification(regIds, alert);
var expiredRegistrationId = ??
}
}
公共类ConnectionManger
{
private readonly IPushManager pushManager=new pushManager();
public void NotifyAppUser(列表注册表、警报)
{
pushManager.PushNotification(regIds,警报);
var expiredRegistrationId=??
}
}
解决方案:推送通知
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?
};
}
}
公共类PushManager:IPushManager
{
公共无效推送通知(列表注册电话、警报)
{
AndroidPush AndroidPush=新的AndroidPush();
androidPush.Push(警报、注册电话);
}
}
公共类AndroidPush:IPUsNotificationStrategy
{
公共作废推送(警报、列表注册ID)
{
//等待GCM服务器
#区域GCM事件
gcmBroker.OnNotificationFailed+=(通知、聚合eEx)=>
{
var expiredRegistrationId=aggregateEx.OldId;
问:如何将expiredRegistrationId传递给ConnectionManager类?
};
}
}
您将.NET作为公共游乐场,因此有几个选项
假设:
- 您所说的解决方案是指单独的dll
- 您需要返回字符串列表(来自原始问题)
- 您的代码使gcmBroker保持活动状态,因此OnNotificationFailed事件可以触发
List<string> Push(Alert alert, List<string> registrationIds)
列表推送(警报、列表注册ID)
将此事件添加到IPushManager界面:
event Action<List<string>> ExpiredRegs;
事件动作到期时间段;
从PushManager实现并调用此事件:
public event Action<List<string>> ExpiredRegs;
// call this when Push returns some expiredRegs :
void OnExpiredRegs(List<string> expiredRegs) => ExpiredRegs?.Invoke(expiredRegs);
public event Action ExpiredRegs;
//当Push返回一些expiredRegs时调用此函数:
void OnExpiredRegs(列出expiredRegs)=>expiredRegs?.Invoke(expiredRegs);
订阅ConnectionManger中的事件:
pushManager.ExpiredRegs += OnExpiredRegs;
void OnExpiredRegs(List<string> expiredRegs)
{
// whatever you need to do
}
pushManager.ExpiredRegs+=OnExpiredRegs;
void OnExpiredRegs(列出过期的段落)
{
//不管你需要做什么
}
将失败属性添加到类ConnectionManager,以便事件处理程序可以设置该属性。如果我将失败属性添加到ConnectionManager,AndroidPush无法设置该属性,因为它正被ConnectionManager引用,并导致循环引用。您需要使用该类的实例。您的问题缺少上下文,很好,而且太模糊了。不清楚为什么不从manager类订阅OnNotificationFailed
事件。类似这样的设计是解决这个问题的正确方法,也就是说,不要期望通知项目了解有关manager项目的任何信息,而是使用C#events来允许manager项目响应通知项目中发生的特定事情。如果你想得到一个好的答案,你需要大大改进这个问题。@PeterDuniho我删除了不必要的代码,并简化了它。我希望这有点道理,我想得到什么?