DryIOC 和 MediatR:使用 InResolutionScopeOf 注入 IAsyncNotificationHandler 和 IAsyncRequestHandler

DryIOC and MediatR: Injection using InResolutionScopeOf for both IAsyncNotificationHandler and IAsyncRequestHandler

这个问题是我上一个问题

的后续问题

我想做的是在 IAsyncRequestHandler 和 IAsyncNotificationHandler 的解析范围内创建 EF DbContext 实例,这意味着请求中注入的上下文不能与通知中注入的上下文相同(从要求)。由于通知是从请求处理程序内部发布的,因此这种嵌套给我所需的设置带来了一些麻烦。

值得注意的是,在给定的 IAsyncRequestHandler 或 IAsyncNotificationHandler 实例中注入的每个 DbContext 在它们自己的装饰器中都需要相同。

我尝试设置它时创建了一个 dotnetfiddle https://dotnetfiddle.net/KiFCHY。 (我在这个例子中省略了装饰器)

它包含一个 RequestHandler,它在被调用时打印一条消息,然后发布一个通知,打印另一条消息。但是,如您所见,通知未被调用,因为 MediatR 无法获取 IAsyncNotificationHandler 实例(因为它无法解析 DbContext)。

这个设置可行吗?

谢谢

找到根本原因:ResolveMany<object>(serviceType) 在 MediatR 设置中使用。

一个 object 表示您需要通过 运行-所需时间 serviceType。但是 DryIoc 有一个问题,使用服务类型 object 而不是 required 类型来找到匹配的解析范围。 object 绝对不能分配给 IAsyncNotificationHandler<T>

这里是修改后的fiddle

敬请期待修复。我会用修复版本更新我的答案。

已更新修复版本

修复与使用它的 DryIoc 2.9.2. Here is fiddle 一起发布。感谢您提出并提出 2 个问题 - 实际用例最重要。