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 个问题 - 实际用例最重要。
这个问题是我上一个问题
我想做的是在 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 个问题 - 实际用例最重要。