c# - 使用引发事件的 ASP.NET Core Web API 控制器时,如何连接事件处理程序?
问题描述
基本上我什至不知道在哪里注册控制器实例的事件处理程序,因为实例化是由 DI 容器处理的,我想在新创建的控制器实例上注册。
这甚至是可取的,还是有更好的方法适合 ASP.NET Core 的体系结构?
场景是这样的:
某个匿名用户可以使用隐藏链接,直到到期日为止。
第一个用例:
任何匿名用户都可以使用对控制器方法的 Web API 调用手动“关闭”链接(使其无效/不可用)。此方法可能引发 OnLinkClosed 事件。
第二个用例:
“计时作业”检查隐藏链接数据库表,如果一个过期,它将将该条目设置为“关闭”(而不是用户)。它可能会调用不同的 API 函数(即,因为现在我们知道是谁/什么关闭了链接),但对它的反应基本相同。这可能会引发 OnLinkClosedByChronJob 事件。
对 OnLinkClosed、OnLinkClosedByChronJob 的反应:
- DB 中的链接数据需要标记为已关闭。
- 需要检查一些数据,并且需要通过电子邮件通知隐藏链接的原始创建者(谁是已知的)。
- (也许需要进行 SignalR 广播。)
- (也许有些统计数据需要更新。)
我不想在控制器方法中硬编码所有这些(以及以后的)功能(以避免长控制器方法是一个问题)。也许我应该在服务中这样做!?我还不确定何时将代码放入控制器方法或服务中。(显然,当我需要多个控制器中的服务功能时除外。任何涵盖此主题的提示/文章都值得赞赏。)
我不一定想使用 MediatR 或功能方法(请参阅此处:https://www. youtube.com/watch?v=IROSd7uB-tg&t=35m11s)但它可能是我正在寻找的。
充其量我想异步甚至并行地完成所有/部分反应功能。
诸如“此链接已关闭 - 有人感兴趣吗?”之类的事件 似乎是一个可行的想法。
解决方案
推荐阅读
- lda - Mallet for LDA 中使用了哪种超参数优化技术?
- google-apps-script - 如何从 SpreadsheetApp 中的单元格文本值获取每个单词的属性(粗体、斜体等)
- python - 如果 a 列中的值大于 1,则在 b 列中打印单词
- r - 根据R中的其他列值删除多行
- go - 通过始终保持相同的顺序将 Map 编入 BSON
- java - 由于我没有 Gradle 版本和 Source 8,Gradle 构建失败
- web-scraping - 网络从 ebay 抓取智能手表列表
- sql - 从预定义查询列表中查找哪些 SQL 查询受 INSERT、UPDATE 或 DELETE 影响
- c# - EF Core 不会在 SaveChanges()/SaveChangesAsync() 上引发异常
- c++ - 将分配的内存写入磁盘