1

这个问题是我之前的问题DryIOC Decorator 和 InResolutionScopeOf的后续问题

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

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

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

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

这种设置可以吗?

谢谢

4

1 回答 1

1

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

object标识您需要通过 run-time required serviceType。但是 DryIoc 存在使用服务类型object而不是必需类型来查找匹配解析范围的问题。而且 anobject绝对不能分配给IAsyncNotificationHandler<T>

这是修改后的小提琴

请继续关注修复。我将使用修复版本更新我的答案。

更新了修复版本

该修复程序随DryIoc 2.9.2一起发布。这是使用它的小提琴。感谢您提出并提出 2 个问题 - 实际用例最重要。

于 2016-11-30T20:48:44.000 回答