【问题标题】:DryIOC and MediatR: Injection using InResolutionScopeOf for both IAsyncNotificationHandler and IAsyncRequestHandlerDryIOC 和 MediatR:对 IAsyncNotificationHandler 和 IAsyncRequestHandler 使用 InResolutionScopeOf 进行注入
【发布时间】:2017-04-10 04:22:11
【问题描述】:

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

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

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

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

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

这种设置可行吗?

谢谢

【问题讨论】:

  • 正在寻找问题,但目前只是粗略的猜测。一有线索就会添加答案。
  • @dadhi,我相信问题在于 MultiInstanceFactory 注册,它使用 ResolveMany 解决,而不是 Resolve。在这种情况下,使用 ResolveMany 似乎无法正确解决依赖关系。我编辑了小提琴并添加了注释行dotnetfiddle.net/KiFCHY
  • 一个很好的发现!会从中挖掘。

标签: dryioc mediatr


【解决方案1】:

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

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

这里是修改后的fiddle

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

已更新修复版本

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

【讨论】:

  • 好的@dadhi,再次感谢您的帮助并继续努力。
猜你喜欢
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
  • 2019-02-06
  • 1970-01-01
  • 2016-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多