Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Caliburn Micro';s EventAggregator是否发送空事件(无有效负载)?_C#_Caliburn.micro_Eventaggregator - Fatal编程技术网

C# 如何使用Caliburn Micro';s EventAggregator是否发送空事件(无有效负载)?

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的问题。我检查了所有标有
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类,可以巧妙地解决它。但我明天肯定会回来投票。