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

时间:2016-11-25 18:14:38

标签: dryioc mediatr

这个问题是对我之前的问题的跟进,DryIOC Decorator and InResolutionScopeOf

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

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

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

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

这种设置可以吗?

由于

1 个答案:

答案 0 :(得分:1)

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

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

以下是修改后的fiddle

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

已更新修复版

此修复程序随DryIoc 2.9.2一起发布。这是使用它的fiddle。感谢您提出并提出2个问题 - 真正的用例最重要。