添加 MediatR 服务

Mus*_*afa 21 c# dependency-injection mediatr asp.net-core

我想添加MediatR到我的服务中。

这是代码:

public class Program
{
   public static async Task Main(string[] args)
   {
      var builder = WebApplication.CreateBuilder(args);
      builder.Services.AddMediatR(Assembly.GetExecutingAssembly());
   }
   // rest of codes ...
}
Run Code Online (Sandbox Code Playgroud)

这是错误:

错误 CS1503 参数 2:无法从“System.Reflection.Assembly”转换为“System.Action<Microsoft.Extensions.DependencyInjection.MediatRServiceConfiguration>”

fre*_*nky 59

如果您使用 MediatR@12.0.1 您可以使用:

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

如果您仍然想使用您的代码版本,那么您应该安装 MediatR.Extensions.Microsoft.DependencyInjection 包,但您可能需要将 MediatR 版本降级到 11

  • @jmath412 在版本 12 中,只有一个 AddMediatR 方法签名将 Action 作为参数。因此直接将程序集作为参数传递是无效的。如果您的处理程序位于不同的程序集中,则可以调用 cfg =&gt; cfg.RegisterServicesFromAssemblies( assembly1, assembly2...) 而不是多个 AddMediatR 调用。这样 MediatR 可以将命令/查询路由到相关处理程序。如果处理程序位于同一程序集中,则应使用单个程序集调用它。 (2认同)