Could not load type 'MediatR.ServiceFactory'
我正在创建一个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,有什么可能的解决方案吗? 提前感谢。
更新到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:
这很简单。为了解决你的问题,只需在你的Program.cs类中添加以下一行。
builder.Services.AddMediatR(x => x.RegisterServicesFromAssemblies(typeof(LibraryEntrypoint).Assembly));
这里"LibraryEntrypoint"是在项目文件夹中创建的一个空类,它的创建只是为了引用我项目的装配。如果你愿意,你可以添加任何一个类。
internal class LibraryEntrypoint
{
}
谢谢你们!
如果有使用Autofac的人看到这个帖子,请转换已废弃的ServiceFactory
注册。
builder.Register<ServiceFactory>(ctx =>
{
var c = ctx.Resolve<IComponentContext>();
return t => c.Resolve(t);
});
基于以下示例填充ServiceCollection
的例子。
var services = new ServiceCollection();
builder.Populate(services);