这篇文章来自:https://ardalis.com/using-mediatr-in-aspnet-core-apps

本文作为翻译,有一些单词翻译成中文可能会有一些误解(对于读者)或者错误(对于作者)的地方,所以在文章中你可以看到一些单词没有进行翻译。如果有不对的地方,请指出,谢谢。

在Asp.net core中使用MediatR

我已经开始考虑使用MediatR作为我的领域事件实现。为了达到这个目的,我用asp.net core创建了一个示例程序,总的来说是非常容易的,如果你之前没有使用过MediatR,或者你正在找一个使用它的示例程序,那么就继续阅读吧。

安装MediatR

假设你使用的是Visual studio,你可以通过nuget的ui来安装下面这两个包:

不是用visual studio的话自己找办法安装吧。

在Startup类中配置MediatR

下一步,在Startup类中,在ConfigureServices方法中添加如下代码:

services.AddMediatR();// if you have handlers/events in other assemblies// services.AddMediatR(typeof(SomeHandler).Assembly,
//       typeof(SomeOtherHandler).Assembly);

在我的示例项目中因为我只有一个工程/程序集,所以没有必要添加其他的。如果你有不只一个程序集需要被配置MediatR,那么你可以按照上面代码中注释掉的那样来配置。

注意:起初我用了Steve Gordon’s helpful article to register my types这个指引,但是MediatR.Extensions.Microsoft.DependencyInjection 包得到了更好的支持和更健壮的成长(更别说更少的代码)。我建议使用这个包。

MediatR 实战

当然,如果你想要确认MediatR在你的asp.net core项目中运作,最高的办法是创建一些简单的类型并验证是否能达到预期的效果。MediatR支持两种消息类型:Request/Response和Notification。我使用它的大多数情况是Notification这种模式。因为我希望用它来做模型的领域事件(如果你对于领域事件不熟悉的话,先了解一下它再回来)。要想使用notifications所期望得到的行为,你需要定义一些实现了INotification的类型,和一些实现了INotificationHandler<sometype>的handler。当你要发布一个notification,每一个handler都会在response中。你可以使用下面的代码来实践一下并能看到最终的结果,如果你正在搞一个新项目,你可以把它放到Home Controller中。

上面的代码撸完后,使用kestrel运行你的应用(你可以在项目的根目录下面进入cmd然后输入dotnet run来启动一个控制台面板,或者在visual studio中改变启动方式,不过一般情况下我直接进到项目的properties目录下面找到lauchSettings.json,吧IIS相关的东西都删除了。)然后查看你的控制台面板的输出,你应该能看到输出的日志:

如果你只是想用MediatR来发布事件,上面的就是了。如果你想要看看怎么用它来做request/response,你需要在实现几个类:

上面的代码定义了一个request以及它的返回类型(string,IRequest<string>).handlers必须实现一个Handle方法,这个方法会返回期望的响应。当你发送一个请求,只有一个handler会被调用并且会返回一个带有合适类型的响应。

(作者在这里说明了一个问题,他给这个包的作者发了一个pull request要求如果有注册了多个handler,那么应该调用注册的第一个,因为只有第一个被添加到了DI系统中)。

当前的版本也不会抛出什么异常,但是即便在将来的版本中会抛出异常,也不会让我感到惊讶什么的。

无论以何种方式,要使用上面定义的内容,你只需要在About 方法中添加如下代码:

从浏览器中浏览/About页面,你能看到调用的结果。目前版本已经更正了结果,你将看到的是注册的第一个(按照你编码的从上到下的顺序,PingHandler是算第一个注册的)handler的返回的结果。

上面就是你要开始研究MediatR的一个很好的开端了。我已经迫不及待的想要将他运用在我的eShopContainer(微软示例项目,讲微服务的)项目当中了。查看这里 Microsoft’s architecture learning hub去获取更多微软的相关技术的书书籍吧。

相关文章:

  • MEDIATR 一个低调的中介者类库

原文地址:https://www.cnblogs.com/pangjianxin/p/9382696.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

【翻译】asp.net core中使用MediatR相关推荐

  1. [译]ASP.NET Core中使用MediatR实现命令和中介者模式

    在本文中,我将解释命令模式,以及如何利用基于命令模式的第三方库来实现它们,以及如何在ASP.NET Core中使用它来解决我们的问题并使代码简洁.因此,我们将通过下面的主题来进行相关的讲解. 什么是命 ...

  2. 如何在 ASP.Net Core 中使用 MediatR

    MediatR 是一个 中介者模式 的.NET开源实现, 中介者模式 管控了一组对象之间的相互通讯并有效的减少了对象之间错综复杂的相互依赖,在 中介者模式 中,一个对象不需要直接和另一个对象进行通讯, ...

  3. ASP.NET Core中使用MediatR实现命令和中介者模式

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9866068.html 在本文中,我将解释命令模式,以及如何利用基于命令模式的第三方库来实现它们,以及如何 ...

  4. 如何使用C#在ASP.NET Core中轻松实现QRCoder

    by Yogi 由瑜伽士 如何使用C#在ASP.NET Core中轻松实现QRCoder (How to easily implement QRCoder in ASP.NET Core using ...

  5. [翻译] ASP.NET Core 2.2 正式版发布

    本文为翻译,原文地址:https://blogs.msdn.microsoft.com/webdev/2018/12/04/asp-net-core-2-2-available-today/ 我(文章 ...

  6. 探索ASP.NET Core中的IStartupFilter

    原文:Exploring IStartupFilter in ASP.NET Core 作者:Andrew Lock 译者:Lamond Lu 在本篇博客中,我将介绍一下IStartupFilter, ...

  7. ASP.NET Core 中文文档 第三章 原理(13)管理应用程序状态

    原文:Managing Application State 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:高嵩 在 ASP.NET Core 中,有多种途径可以对应用程序的状态进行 ...

  8. Api网关Kong集成Consul做服务发现及在Asp.Net Core中的使用

     1622219047536 写在前面   Api网关我们之前是用 .netcore写的 Ocelot的,使用后并没有完全达到我们的预期,花了些时间了解后觉得kong可能是个更合适的选择. 简单说下 ...

  9. 一图看懂 ASP.NET Core 中的服务生命周期

    翻译自 Waqas Anwar 2020年11月8日的文章 <ASP.NET Core Service Lifetimes (Infographic)> [1] ASP.NET Core ...

最新文章

  1. Open3d 学习计划—13(Azure Kinect)
  2. layer 弹不出来_红米k20pro摄像头弹不出来怎么办?昆明小米手机维修教你解决
  3. 软件测试 图覆盖,软件测试(四)——图覆盖
  4. 用Windows live Writer 2012发布51cto博客
  5. ServiceStack.Redis之IRedisClient第三篇
  6. 3月更新来了!Windows 11正式版22000.556发布
  7. [功能发布]Excel与PowerBI互通互联升级版连接SSAS和AzureAS
  8. LeetCode 1506. Find Root of N-Ary Tree(异或)
  9. mysql 8.0.11-Windows (x86, 64-bit)下载地址与安装教程
  10. Leetcode PHP题解--D56 637. Average of Levels in Binary Tree
  11. linux改目录权限和宿主。
  12. 高斯主元素消去法c语言,列主元Gauss消去法(C++实现)
  13. SageMaker 超参数优化作业
  14. Vue中select默认选中下拉选项第一条(举例iview AutoComplete组件)
  15. confluence 制作流程图_Sketch制作交互流程图,哪种工具最高效?
  16. 【华为2019年校园招聘】A计划 实习面试流程
  17. 数据挖掘 模型的衡量标准与建模
  18. HTML 管理员登陆小功能 连接数据库
  19. Maven项目进行打包出现 The POM for xxxx is missing, no dependency information available
  20. 用GetDta获取图片中柱状图数据

热门文章

  1. sql 中 limit 与 limit,offset连用的区别
  2. 基于FPGA的异步FIFO设计
  3. 大数据在金融领域的应用及问题时
  4. Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)(转)
  5. 设置圆角、定向设置圆角-按钮等控件
  6. margin-top绑架父节点问题的分析
  7. iOS开发  plist字段列表,很全
  8. Windows Server 2012 DHCP 服务器中的新功能:故障转移和策略
  9. 使用Windbg内核调试连接调试用户态程序的方法
  10. Dapr + .NET 实战(七)Secrets