我正在创建一个 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 对象中。通过程序集进行扫描的重载需要使用此配置对象上的方法进行注册:
如果任何使用 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)
| 归档时间: |
|
| 查看次数: |
19724 次 |
| 最近记录: |