也许我搞错了,但是下面是MediatR在ServiceStacks容器配置中的注册:
public override void Configure(Container container)
{
SetConfig(new HostConfig { DebugMode = true });
var mediator = new Mediator(x => x.CreateInstance());
container.Register<IMediator>(mediator);
// This resolves
var mediatorInstance = container.Resolve<IMediator>();
container.Register(c => new MyService(mediatorInstance));
}在ServiceStack API服务方法中,如果这被调用
_mediator.Send(command);然后返回错误:
"ErrorCode": "MemberAccessException", "Message": "Cannot create an abstract class."
这句话的原因似乎是:
var mediator = new Mediator(x => x.CreateInstance());MediatR为不同的容器提供扩展库,但不为ServcieStack (FunQ或SimpleContainer)提供扩展库。因此,我不知道如何正确设置MediatR。
目前,我使用的是ServiceStack v5.10.4 (最新版本: 5.12.0)和MediatR v5.1.0 (最新版本: 9.0.0)和.NET Framework4.5。
发布于 2021-09-10 09:54:36
既然MediatR有一个ASP.NET核心的IOC示例,我就坚持这样做,即:
如果您使用的是ASP.NET核心,那么您可以跳过配置,使用MediatR的MediatR.Extensions.Microsoft.DependencyInjection包,其中包括一个IServiceCollection.AddMediatR(程序集)扩展方法,允许您在给定的程序集中注册所有处理程序和预/后处理器。
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddMediatR(typeof(Startup));
}ServiceStack的IOC将自动退却解决ASP.NET核心的IOC中的任何依赖项。
https://stackoverflow.com/questions/69128005
复制相似问题