无法加载类型“MediatR.ServiceFactory”

And*_*dez 26 mediatr .net-6.0

我正在创建一个 Api,并且也在使用 mediatR,我已经创建了命令、查询、处理程序,但是当我尝试启动我的 Api 时,我在程序类中收到此错误消息:

Could not load type 'MediatR.ServiceFactory' from assembly 'MediatR, Version=12.0.0.0, Culture=neutral, PublicKeyToken=bb9a41a5e8aaa7e2'.
Run Code Online (Sandbox Code Playgroud)

我正在我的程序类中注册我的 mediatR,如下所示:

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

我已经安装了 MediatR (最新版本: 12.0.0 )和 MediatR.Extensions.Microsoft.DependencyInjection (版本: 11.0.0 ),因为目前最新版本(11.1.0)已被弃用。 在此输入图像描述

我正在使用 .Net 6,有什么可能的解决方案吗?提前致谢。

Adr*_*lea 66

MediatR 12 的更新附带了迁移指南(此处)

要解决您的问题,请更换

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

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

如果您有来自另一个(单个)程序集的处理程序,您可以尝试以下操作:

 services.AddMediatR(cfg=>cfg.RegisterServicesFromAssemblies(typeof(MyCoolThingInAnotherAssemblyRequestHandler).GetTypeInfo().Assembly));
Run Code Online (Sandbox Code Playgroud)

要使用上述任何扩展方法..您可能需要添加:

using MediatR;
Run Code Online (Sandbox Code Playgroud)

来自迁移指南

仅通过配置对象进行服务注册 通过 IServiceCollection 进行服务注册以前具有各种选项的重载。这些现在已合并到单个 MediatrServiceConfiguration 对象中。通过程序集进行扫描的重载需要使用此配置对象上的方法进行注册:


Gri*_* W. 9

如果任何使用 Autofac 的人看到这篇文章,请转换已弃用的ServiceFactory注册

builder.Register<ServiceFactory>(ctx =>
{
  var c = ctx.Resolve<IComponentContext>();
  return t => c.Resolve(t);
});
Run Code Online (Sandbox Code Playgroud)

ServiceCollection根据以下示例填充

var services = new ServiceCollection();
        
builder.Populate(services);
Run Code Online (Sandbox Code Playgroud)