C# 如何使用Caliburn Micro';s EventAggregator是否发送空事件(无有效负载)?
我找到了关于棱镜的问题,但我没有找到任何关于Caliburn Micro的问题。我检查了所有标有C# 如何使用Caliburn Micro';s EventAggregator是否发送空事件(无有效负载)?,c#,caliburn.micro,eventaggregator,C#,Caliburn.micro,Eventaggregator,我找到了关于棱镜的问题,但我没有找到任何关于Caliburn Micro的问题。我检查了所有标有Caliburn.Micro和EventAggregator的问题,但没有发现Caliburn关于这个看似基本的问题的任何具体信息 场景:我想将事件发布到EventAggregator中,这些事件没有任何信息,只是发出发生事件的信号 问题:首先,在Caliburn Micro中,EventAggregator的Publish()方法需要发送类型的实例。其次,订阅和处理事件需要实现IHandle接口,其
Caliburn.Micro
和EventAggregator
的问题,但没有发现Caliburn关于这个看似基本的问题的任何具体信息
场景:我想将事件发布到EventAggregator
中,这些事件没有任何信息,只是发出发生事件的信号
问题:首先,在Caliburn Micro中,EventAggregator
的Publish()
方法需要发送类型的实例。其次,订阅和处理事件需要实现IHandle
接口,其中T
是我们想要接收的实例类型。这似乎完全是围绕发布和处理实际数据而设计的
目标:能够发布简单事件,而不必创建和实例化多个空/伪类,也不必处理()
我需要使用条件进一步过滤的不必要事件
到目前为止我的解决方案 这就是我想要改进/替换的。(显然,这个解决方案是有问题的,因为它在具体类周围创建了更紧密的耦合,但在我的用例中,这不是一个大问题,因为它是一个小项目,为给定事件提供了单一的发布组件,EventAggregator服务于其他实际目标。) 我创建了一个通用的
Signal
类,它实现了单例模式,通过instance
属性提供了自身的静态实例:
public class Signal<T>
{
public static readonly Signal<T> Instance = new Signal<T>();
private Signal() { }
}
并通过以下方式声明IHandle的实现来处理事件:
IHandle<Signal<SignalSourceClass>>
IHandle
通过这种方式,我可以通过只创建一个信号
类来发送和接收“空”事件。(当然,这是一个有限的解决方案,因为组件只能以这种方式发送一个事件。)
我怀疑这个解决方案是原始的(好吧,让我们称之为事实),我忽略了一些更好的东西。只需创建一个包含所有可能信号的枚举:
public enum ProjectSignals
{
Connected,
Disconnected,
Openned
}
那就
_eventAggregator.PublishOnUIThread( ProjectSignals.Connected );
及
class-SomeClass:IHandle
{
公共无效手柄(项目信号)
{
开关(信号)
{
有关个案:
打破
}
}
}
只需创建一个包含所有可能信号的枚举:
public enum ProjectSignals
{
Connected,
Disconnected,
Openned
}
那就
_eventAggregator.PublishOnUIThread( ProjectSignals.Connected );
及
class-SomeClass:IHandle
{
公共无效手柄(项目信号)
{
开关(信号)
{
有关个案:
打破
}
}
}
您是否希望有与事件关联的类型?我想您也可以发送“”_eventAggregator.PublishOnIthread(“”);是的,我希望事件能够以某种方式被识别,并以一种不需要在接收类中进行额外的“如果”检查的方式实现IHandle和Handle()(例如,它们没有接收到对它们无用的事件)。如果我可以使用事件的发送者,这将是这个小项目的完美选择。也许我应该尝试用其他功能装饰EventAggregator类?您是否希望有一个与事件关联的类型?我想您也可以发送“”_eventAggregator.PublishOnIthread(“”);是的,我希望事件能够以某种方式被识别,并以一种不需要在接收类中进行额外的“如果”检查的方式实现IHandle和Handle()(例如,它们没有接收到对它们无用的事件)。如果我可以使用事件的发送者,这将是这个小项目的完美选择。也许我应该尝试用额外的功能来装饰EventAggregator类?谢谢!你认为我能避免这种转变吗?(并且只接收例如ProjectSignals.Connected)我会绝对支持你的答案,但我今天的票数已经用完了。:)不直接。发布基于对象的类型。您可以为每个要捕获的对象创建一个枚举。一个用于连接,一个用于断开连接,等等。是的,这肯定是可行的,但与空类类似,空枚举看起来有点奇怪;我希望得到“感觉不错”的东西。但不确定在这种情况下这是否是正确的态度。:)我想使用枚举的意义在于它重量更轻,内存压力更小。是的,你说得对。如果可以的话,我现在就让它开着;也许我可以找到或想出一些装饰EventAggregator类,可以巧妙地解决它。但我明天一定会回来投票的。谢谢!你认为我能避免这种转变吗?(并且只接收例如ProjectSignals.Connected)我会绝对支持你的答案,但我今天的票数已经用完了。:)不直接。发布基于对象的类型。您可以为每个要捕获的对象创建一个枚举。一个用于连接,一个用于断开连接,等等。是的,这肯定是可行的,但与空类类似,空枚举看起来有点奇怪;我希望得到“感觉不错”的东西。但不确定在这种情况下这是否是正确的态度。:)我想使用枚举的意义在于它重量更轻,内存压力更小。是的,你说得对。如果可以的话,我现在就让它开着;也许我可以找到或想出一些装饰EventAggregator类,可以巧妙地解决它。但我明天肯定会回来投票。