如何在.NET 6中添加mediatr?

Ste*_*eve 20 mediatr

ConfigureServices在.NET Core中,我们可以在方法中添加它

services.AddMediatR(typeof(Startup));
Run Code Online (Sandbox Code Playgroud)

但在 .NET 6 中,只有Program.cs. 如何在.NET 6中添加mediatr?

尝试使用此代码但出现构建错误

在此输入图像描述

spy*_*s__ 82

MediatR 12.0.0 之前

builder.Services.AddMediatR(Assembly.GetExecutingAssembly());
Run Code Online (Sandbox Code Playgroud)

自 MediatR 12.0.0 起

    services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly()));
Run Code Online (Sandbox Code Playgroud)

编辑(解释):AddMediatR 扩展方法需要扫描程序集,以便它可以注册所有处理程序和中介器类型。在以前版本的 dotnet 中,我们使用 typeof(Startup) 来指向我们的 asp 项目的程序集。我们总是可以做同样的事情,而不是通过在我们的 asp 项目中创建一个接口来获取执行程序集,这也有助于测试。只需创建一个具有有意义名称的空接口,例如 IProjectNameMarker 之类的名称,然后您就可以使用 typeof(IProjectNameMarker)。


Jim*_*dge 7

如果您使用 MediatR 12.0.0 及更高版本,则不再需要 MediatR.Extensions.Microsoft.DependencyInjection 包,因为它已弃用并包含在 MediatR 包本身中。

另外,如果使用版本 12.0.0,您不能再仅传递类型,而必须指定程序集,可以使用 @spyros__ 建议的代码,或者如果您想特定于特定类型,则可以使用一些反射: -

builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblyContaining(typeof(Product)));
Run Code Online (Sandbox Code Playgroud)