如何避免 Caliburn Micro Event Aggregator HandleAsync 方法名称的警告?
Posted
技术标签:
【中文标题】如何避免 Caliburn Micro Event Aggregator HandleAsync 方法名称的警告?【英文标题】:How to avoid warnings for Caliburn Micro Event Aggregator HandleAsync method names? 【发布时间】:2021-11-28 00:31:00 【问题描述】:我的问题很简单,如果我使用 Caliburn Micro 的事件聚合器,并实现接口“IHandle”,那么就会创建一个名为“HandleAsync(MyEvent message, CancelleationToken)”的方法。
我的问题是,这些方法通常不是异步的,不需要用“异步”标记,也不需要返回任务,因此实际上不应该在末尾加上“异步”,因为它们不是异步方法,并在 Visual Studio 中引发警告。
这不会给我带来任何技术问题,只是为了遵守 Caliburn Micro 的事件聚合器订阅方法接口而错误地命名方法很烦人。
简单的问题是如何从方法名称的末尾删除 Async,或者以其他方式摆脱这些警告?
谢谢
加里
【问题讨论】:
警告到底是什么样的? Visual Studio 警告 CS1998,基本上是一个样式问题,您不应该在非异步方法的方法名称末尾使用“Async”,而且很多事件聚合器方法都不是,它们是刷新列表或其他内容的简单调用。 【参考方案1】:不幸的是,当前在 Caliburn Micro 中实现 EventAggregator
是不可能的。
如果您要检查 github repository 中 EventAggregator 的实现,您会注意到它正在搜索具有特定名称的方法。
var interfaces = handler.GetType().GetTypeInfo().ImplementedInterfaces
.Where(x => x.GetTypeInfo().IsGenericType && x.GetGenericTypeDefinition() == typeof(IHandle<>));
foreach (var @interface in interfaces)
var type = @interface.GetTypeInfo().GenericTypeArguments[0];
var method = @interface.GetRuntimeMethod("HandleAsync", new[] type, typeof(CancellationToken) );
if (method != null)
_supportedHandlers[type] = method;
另一种方法是实现您自己的IEventAggregator
版本并引入两个接口IHandle<T>
和IHandleWithTask<T>
来表示同步和异步变体。
【讨论】:
这是我所期望的,也许在这里实现我自己的选项是一种选择。谢谢。【参考方案2】:你应该可以suppress源代码中的警告。
在错误列表中右键单击它并选择 Suppress->In Source 或 Suppress->In Suppression File,具体取决于您要插入#pragma
指令的位置。
【讨论】:
谢谢,我希望找到一种方法来实际解决问题而不是抑制警告,这实际上只是让我感到困惑的事情之一,而不是实际的技术问题。以上是关于如何避免 Caliburn Micro Event Aggregator HandleAsync 方法名称的警告?的主要内容,如果未能解决你的问题,请参考以下文章
Caliburn Micro:如何设置绑定 UpdateSourceTrigger?
Caliburn.Micro 子菜单项如何单击在包含视图的视图模型上调用操作?
使用 WPF 和 Caliburn.Micro 在视图中添加多个视图
Caliburn.Micro 将 DateTimeOffset 绑定到 DatePicker