这个问题是对我之前的问题的跟进,DryIOC Decorator and InResolutionScopeOf
我尝试做的是在IAsyncRequestHandler和IAsyncNotificationHandler的解析范围内创建EF DbContext实例,这意味着请求中注入的上下文不能与通知中注入的上下文相同(已发布)来自请求)。由于通知是从请求处理程序内部发布的,因此这种嵌套会在我所需的设置中产生一些麻烦。
值得注意的是,在给定的IAsyncRequestHandler或IAsyncNotificationHandler实例中注入的每个DbContext需要在它们自己的装饰器中相同。
我创建了一个dotnetfiddle,试图设置它https://dotnetfiddle.net/KiFCHY。 (我在这个例子中省略了装饰者)
它包含一个RequestHandler,它在调用时打印一条消息,然后发布一条通知,打印另一条消息。但是,正如您所看到的,通知未被调用,因为MediatR无法获取IAsyncNotificationHandler实例(因为它无法解析DbContext)。
这种设置可以吗?
由于
答案 0 :(得分:1)
找到根本原因:ResolveMany<object>(serviceType)
用于MediatR设置。
object
表示您需要传递所需的运行时serviceType
。但DryIoc存在使用服务类型object
而不是必需类型来查找匹配解析范围的问题。并且object
绝对不能分配给IAsyncNotificationHandler<T>
。
以下是修改后的fiddle
请继续关注修复程序。我将使用修复版本更新我的答案。
此修复程序随DryIoc 2.9.2一起发布。这是使用它的fiddle。感谢您提出并提出2个问题 - 真正的用例最重要。