Could not load type 'MediatR.ServiceFactory'

回答 3 浏览 2807 2023-02-22

我正在创建一个Api,我也在使用mediatR,我已经创建了我的命令、查询、处理程序,但当我试图启动我的Api时,我在我的程序类中得到了这个错误信息:

Could not load type 'MediatR.ServiceFactory' from assembly 'MediatR, Version=12.0.0.0, Culture=neutral, PublicKeyToken=bb9a41a5e8aaa7e2'.

我在我的程序类里这样注册我的MediatR:

builder.Services.AddMediatR(Assembly.GetExecutingAssembly());

我已经安装了MediatR(最新版本:12.0.0)和MediatR.Extensions.Microsoft.DependencyInjection(版本:11.0.0),因为此刻的最新版本(11.1.0)已经废弃。 在此输入图片描述

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

Andres Guillen Hernandez 提问于2023-02-22
3 个回答
#1楼 已采纳
得票数 13

更新到MediatR 12时,附带了一份迁移指南在这里

要解决你的问题,请将以下:

builder.Services.AddMediatR(Assembly.GetExecutingAssembly());

替换为:

services.AddMediatR(cfg=>cfg.RegisterServicesFromAssemblies(Assembly.GetExecutingAssembly()));

来自迁移指南:

Service registration through configuration object exclusively Service registration through IServiceCollection previously had overloads for various options. These are now consolidated into the single MediatrServiceConfiguration object. Overloads that passed through the assemblies to scan need to register using methods on this configuration object instead:

Adrian Ciolea 提问于2023-02-22
#2楼
得票数 1

这很简单。为了解决你的问题,只需在你的Program.cs类中添加以下一行。

builder.Services.AddMediatR(x => x.RegisterServicesFromAssemblies(typeof(LibraryEntrypoint).Assembly));

这里"LibraryEntrypoint"是在项目文件夹中创建的一个空类,它的创建只是为了引用我项目的装配。如果你愿意,你可以添加任何一个类。

internal class LibraryEntrypoint
{

}

谢谢你们!

Abdurrahman Noori 提问于2023-03-05
Abdurrahman Noori 修改于2023-03-05
#3楼
得票数 0

如果有使用Autofac的人看到这个帖子,请转换已废弃的ServiceFactory注册。

builder.Register<ServiceFactory>(ctx =>
{
  var c = ctx.Resolve<IComponentContext>();
  return t => c.Resolve(t);
});

基于以下示例填充ServiceCollection的例子

var services = new ServiceCollection();
        
builder.Populate(services);
Griffin 提问于2023-03-08
标签